在我的一个视图页面中我使用旧时尚的方式呈现数据,但是在将像“User.country.name”这样的字符串转换为查询语句时遇到了问题。 我正在使用如下的循环:
@columns = ['id','email','name','country.name']
table = User.all
<% table.each do |row| %>
<% @columns.each do |field| %>
<%= row[field] %>
<% end %>
<% end %>
该表显示除“country.name”列以外的几乎所有数据。我不能使用constantize for country.name它给我错误。有解决方案吗感谢
答案 0 :(得分:2)
您的User
没有属性country.name
,它有一个关联 country
,该关联的属性为name
。< / p>
您可以设置delegate:
class User < ActiveRecord::Base
delegate :name, to: :country, prefix: true
# ...
end
这会创建一个方法User#country_name
,返回country.name
。
现在你可以调整你的循环,使用public_send
来调用方法:(我已经改变了变量名来使它更清晰)
@methods = [:id, :email, :name, :country_name]
records = User.all
<% records.each do |record| %>
<% @methods.each do |method| %>
<%= record.public_send(method) %>
<% end %>
<% end %>
答案 1 :(得分:0)
@users = User.select(:id, :email).joins(:countries)
<% @users.each do |user| %>
<%= user.id %>
<%= user.email %>
<%= user.countries %>
<% end %>
http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-joins
希望有所帮助