Ruby on Rails — свойства навигации: o?

#ruby-on-rails #querying

#ruby-on-rails #выполнение запросов

Вопрос:

Я новичок в Rails, и у меня есть две модели (Ticket, User). У одного билета есть один пользователь — у одного пользователя есть множество билетов.

Я хотел бы отобразить «имя пользователя заявки» на странице обзора..

Я уже настроил свои модели и ассоциации. Следующий код должен отображать таблицу из 3 столбцов с именем пользователя посередине, но я получаю сообщение об ошибке:(

«неопределенный метод `users’ для …»

Я перехожу из C #, используя Entity Framework.. Я думал, что RoR понимает выражение «article.user.firstname»

 <% @tickets.each do |article| %>
       <tr>
         <td class="cell"><%= article.title %></td> //fine
         <td class="cell"><%= article.user.firstname %></td> // le error :(
         <td class="cell"><%= article.description %></td> //fine
       </tr>
     <% end %>
  

Кто-нибудь может показать мне, как это заархивировать?

User.rb

 class User < ActiveRecord::Base
has_many :tickets, dependent: :destroy
end
  

Ticket.rb

 class Ticket < ActiveRecord::Base
belongs_to :user
end
  

ticket_controller.rb

 class TicketsController < ApplicationController

def index
    @tickets = Ticket.all.includes(:user)
end

def new 
@users = User.all   

end

def create
    @ticket = Ticket.new(article_params)

    @ticket.save
    redirect_to @ticket
end

def show
    @ticket = Ticket.find(params[:id])
end 

private
def article_params
        params.require(:ticket).permit(:title, :description)
end


end
  

Обновить:

Мне пришлось переопределить свою модель с помощью «rails generate model Ticket title:строковое сообщение:string user_id». После этого я запустил «rake db: migrate» (после удаления этой таблицы, в противном случае я получил сообщение об ошибке).

Затем я устанавливаю ассоциации, записывая «belongs_to :user» в ticket.rb и «has_many :tickets» в мой user.rb-файл.

Комментарии:

1. Можете ли вы опубликовать запрос, используемый для получения @tickets

2. Можете ли вы также опубликовать свои ассоциации с моделями. Это aritcle.user.firstname ?

3. разве так не должно быть article.user.firstname ?

4. Я попробовал article.user.firstname .. та же ошибка:(

5. мой запрос: @tickets = Ticket.all.includes(:user)

Ответ №1:

Можете ли вы опубликовать свою таблицу пользователей, таблицу заявок и контроллер заявок. чтобы проверить, нет ли у вас синтаксической ошибки. Вы говорите, что у билетов есть только 1 пользователь, и у вас есть article.users, а не article.user добавить пользователя в

 def article_params
        params.require(:ticket).permit(:title, :description,:user_id)
end
  

Можете ли вы опубликовать форму для использования, если вы получаете текущий идентификатор пользователя в форме

при переносе таблицы заявок у вас есть t.целое число :user_id

Проблема, которую я замечаю, заключается в том, что при создании списка пользователь ищет в этой таблице tickets, а не в таблице Users.Вот почему вы не выдаете ошибку при использовании только article.user

на консоли попробуйте User.all и посмотрите, есть ли у вас user, а затем попробуйте то же самое с Ticket.ВСЕ

Комментарии:

1. тикет: идентификатор, заголовок: строка, сообщение:строка, пользователь: int, created_at, updated_at.

2. идентификатор пользователя: int, имя_аккаунта:строка, firstname: строка, lastname: строка, created_at, updated_at

3. та же ошибка: неопределенный метод `firstname’ для nil:NilClass

4. какой тип ошибки вы получаете, если используете это <%= article.user%>

5. вы заставляете пользователей создавать?

Ответ №2:

В комментариях вы упоминаете, что получаете ошибку в строках «неопределенный метод `firstname’ для nil: NilClass». Это означает, что вашему билету не назначен пользователь, поэтому пользователь равен нулю. Вы получаете эту ошибку, потому что пытаетесь обрабатывать nil как пользователя.

Комментарии:

1. но в таблице «tickets», в столбце «user», есть идентификатор пользователя (1) .. 🙁 .. Я не понимаю, почему Ruby говорит user = nil