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

问题描述:

我想访问部分连接表中的列。当我在“正常”视图(例如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我想要得到的CURRENT_USER的fakeposts并添加列“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

好吧,我找到了错误的来源,对于“外人”,找不到(因为我没有提供整个代码)。

在我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") 

结论

所以一切都很好,并且可以让你在一个局部:)连接列。