Rails:无法访问部分中的连接表中的列

时间:2016-12-15 14:59:11

标签: ruby-on-rails ruby ruby-on-rails-3 join partial

我想从部分中的连接表中访问列。当我在" 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;在我的部分工作正常,所以我猜我称之为偏的方式是正确的吗?

1 个答案:

答案 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")

<强>结论

所以其他一切都很好,可以将你的连接列放在部分:)。