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

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

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

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

"неопределенный метод "пользователи" для..."

Я исхожу из С#, используя 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 %>

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

Пользователь.rb

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

Билет.рб

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 message:string user_id». После этого я запустил «rake db: migrate» (после удаления этой таблицы, иначе я получил ошибку).

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


person Erik Mandke    schedule 06.07.2014    source источник
comment
Можете ли вы опубликовать запрос, используемый для получения @tickets   -  person Icicle    schedule 06.07.2014
comment
Можете ли вы также опубликовать свои модельные ассоциации. Это aritcle.user.firstname ?   -  person Icicle    schedule 06.07.2014
comment
разве это не должно быть article.user.firstname?   -  person Eyeslandic    schedule 06.07.2014
comment
Я попробовал article.user.firstname .. та же ошибка :(   -  person Erik Mandke    schedule 06.07.2014
comment
мой запрос: @tickets = Ticket.all.includes(:user)   -  person Erik Mandke    schedule 06.07.2014


Ответы (2)


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

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

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

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

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

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

person Frank004    schedule 06.07.2014
comment
билет: идентификатор, заголовок: строка, сообщение: строка, пользователь: целое, created_at, updated_at. - person Erik Mandke; 06.07.2014
comment
пользователь: id:int, account_name:string, firstname:string, lastname:string, created_at, updated_at - person Erik Mandke; 06.07.2014
comment
та же ошибка: неопределенный метод «имя» для nil: NilClass - person Erik Mandke; 06.07.2014
comment
какой тип ошибки вы получите, если используете этот ‹%= article.user%› - person Frank004; 07.07.2014
comment
у вас есть пользователи создают ? - person Frank004; 07.07.2014
comment
в форме, когда вы создаете тикет, вы делаете это для пользователя ?? - person Frank004; 07.07.2014
comment
У меня есть ComboBox там. . - person Erik Mandke; 07.07.2014
comment
‹%= f.label :Benutzer %›‹br /› ‹%= f.collection_select :user_id, @users, :id, :firstname, :prompt =› Выбрать пользователя %› - person Erik Mandke; 07.07.2014
comment
Хорошо... моя ошибка - я думал, что устанавливаю ассоциации, написав в классах модели created_to и has_many. Но на самом деле мне также нужно было указать правильное имя столбца! В тикете таблицы была колонка user — это должен был быть user_id. Я думал, что rake db:migrate сделает это за меня автоматически. - person Erik Mandke; 07.07.2014
comment
Рад, что смог быть полезен. обновите свой вопрос с исправлением, чтобы пользователи с такой же проблемой могли быстро найти его, и исправьте заголовок - person Frank004; 07.07.2014

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

person Chuck    schedule 06.07.2014
comment
но в таблице билетов в столбце пользователь есть идентификатор пользователя (1).. :( .. я не понимаю, почему Руби говорит, что пользователь = nil - person Erik Mandke; 07.07.2014