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%>在我的部分工作正常,所以我想我打电话的方式我的部分是正确的?
答
好吧,我找到了错误的来源,对于“外人”,找不到(因为我没有提供整个代码)。
在我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")
结论
所以一切都很好,并且可以让你在一个局部:)连接列。
好像你有一个错字'Fakepost.joins(randomized_fakeposts)'应该是'Fakepost.joins(:randomized_fakeposts)' –
啊,谢谢:),我修复了错字(因为在我的代码中它是正确的) 。 – OhDaeSu
完全相同的方法在您的轨道控制台中工作吗? – angkiki