Rails 3正确使用动态列

时间:2012-04-12 11:44:50

标签: ruby-on-rails-3

我有一个用户模型,它有一个连接列,我试图在调用views / user / _showcase.html.erb partial时将其作为additional_column引用

有关完整的背景故事,请参阅Rails 3 noob questions using partials correctly,因为我被要求将问题分成两个帖子。

视图/用户/ _showcase.html.erb

<td><img src="<%= user.avatar_url(32) %>" /></td>
<td><%= user.username%></td>    
<% additional_columns.each do |column| %>
    <td><%= user[column]%></td>
<% end %>

以下是我在用户模型上实现计算列的方法

class User < ActiveRecord::Base

  include ActionView::Helpers::DateHelper

  ... snip ...

  # Get the last 10 users who made Karmunity accounts
  scope :get_newest_users , order("created_at desc").limit(10);

  # Get 10 users with the highest karma score
  scope :get_highest_rated_user, order("karma_score desc").limit(10);

  scope :avatar_url
  scope :joined

  # get the dated they joined in time ago format  
  def joined
    time_ago_in_words(self.created_at)
  end

  # Get the gravatar image url 
  def avatar_url (size=nil)

    query_string = '';

    unless size.nil?
      query_string = 's=' + size.to_s  
    end

    "http://www.gravatar.com/avatar/" + Digest::MD5.hexdigest(self.email.strip.downcase) + "?#{query_string}"
  end
end

但是,当我执行此代码时,user.avatar_url,如果我手动键入user.joined,它工作正常,但动态列(我假设它的行为类似于user [:joined])返回一个空字符串。我确定我在这里做了一些蠢事,但我不知道如何动态获取计算/格式化的模型值。

为了完整起见,这是我对部分

的调用
<%= render :partial => 'users/showcase', :locals => { :id => 'newest_users', :title => 'Newest Users', :users => @newest_users, :additional_columns => [:affiliation,:joined]} %>

我很欣赏任何方向,因为这是我的第一个rails应用程序,我不确定我应该问什么样的问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

所以我偶然发现了一个解决方案,但我不知道这是不是一个好的实现

<% users.each do |user| %>
    <tr>
        <td><img src="<%= user.avatar_url(32) %>" /></td>
        <td><%= user.username%></td>
        <% additional_columns.each do |column| %>
            <td><%= user.send(column)%></td>
        <% end %>
    </tr>
<% end %>