将字符串转换为活动记录查询语句

时间:2014-01-28 11:02:23

标签: mysql ruby-on-rails ruby activerecord rails-activerecord

在我的一个视图页面中我使用旧时尚的方式呈现数据,但是在将像“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它给我错误。有解决方案吗感谢

2 个答案:

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

希望有所帮助