2016-12-15 3 views
0

Я хочу получить доступ к столбцу из таблицы соединений в частичном. Когда я обращаюсь к этому столбцу в «нормальном» представлении (например, в fakeposts # index), он работает, однако, если я хочу сделать то же самое в частичном, это не сработает.Rails: не удается получить доступ к столбцу из таблицы соединений в частичном

Пример:

У меня есть пользователи и таблица fakeposts. Для каждого пользователя, я хочу, чтобы отобразить fakeposts в определенном (рандомизированные) порядка, а именно - на основе столбца randomized_time -, который сохраняется в соединительной таблице:

randomized_posts стол:

user_id | fakepost_id | randomized_time 

Мои Модели выглядеть следующим образом:

#user.rb 
has_many :randomized_fakeposts 

#fakepost.rb 
has_many :randomized_fakeposts 

# randomized_fakepost.rb 
belongs_to :fakepost 
belongs_to :user 

в моем fakepost_controller.rb я хочу, чтобы получить fakeposts для CURRENT_USER и добавить колонку «randomized_time» в мой выбор:

Мой fakepost_controller.rb

def index 
    @fakeposts = Fakepost.joins(:randomized_fakeposts).where(randomized_fakeposts: {user_id: current_user.id}).select("fakeposts.*, randomized_fakeposts.randomized_time") 
end 

Это работает: index.html.erb

<% @fakeposts.each do |post| %> 
    <%= post.randomized_time %> 
<% end %> 

Это не работает: index.html.erb и моя частичная

#index.html.erb 
<% @fakeposts.each do |post| %> 
    <%= render :partial => "layouts/individual-post", :locals => {:post => post} %> 
<% end %> 

#layouts/_individual-post.html.erb 
<%= post.randomized_time %> 

Сообщение об ошибке

=> undefined method `randomized_time' for #<Fakepost:0x007f7752eeab58> 

Однако, что-то вроде <% = post.created_at%> работает нормально в моей частичной, так что я думаю, как я называю мой парциальное правильно?

+0

Похоже, у вас есть опечатка 'Fakepost.joins (randomized_fakeposts)' должен быть 'Fakepost.joins (: randomized_fakeposts)' –

+0

Ах, спасибо :), я исправил опечатку (так как в моем коде это правильно) , – OhDaeSu

+0

Точно такой же метод работает в консоли рельсов? – angkiki

ответ

0

Хорошо, я нашел источник ошибки и для «аутсайдеров» было невозможно найти (так как я не представил весь код).

В моем FakepostsController.rb я также имел:

def index 
    # This line is the same line like in my original post 
    @fakeposts = Fakepost.joins(:randomized_fakeposts).where(randomized_fakeposts: {user_id: current_user.id}).select("fakeposts.*, randomized_fakeposts.randomized_time") 
    ... 
    # This was the line which causes the error: 
    @pinned_fakeposts = Fakepost.where(pinned: true) 
end 

Поскольку мои @pinned_fakeposts не включили мою колонку "randomized_time" (я не .joins его), произошла ошибка.

Так что я сделал:

@pinned_fakeposts = Fakepost.where(pinned: true).joins(:randomized_fposts).where(randomized_fakeposts: {user_id: current_user.id}).select("fakeposts.*, randomized_fakeposts.randomized_time") 

Заключение

Так что все остальное было в порядке, и можно получить ваш присоединиться столбец частичного :).

Смежные вопросы