我想从部分中的连接表中访问列。当我在" normal"中访问此列时视图(例如fakeposts #index)它正在工作,但是如果我想在局部做同样的事情,它就不起作用。
示例:
我有一个用户和一个假邮件表。对于每个用户,我想以特定(随机)顺序显示伪造的邮件 - 即基于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中,我想获取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>
然而,类似于&lt;%= post.created_at%&gt;在我的部分工作正常,所以我猜我称之为偏的方式是正确的吗?
答案 0 :(得分: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")
<强>结论强>
所以其他一切都很好,可以将你的连接列放在部分:)。