我怎样才能让Rails 4像真实的那样处理虚拟属性?

时间:2015-04-05 16:15:25

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

我的模型有一个some_date字段和一个这样的getter:

def day
    some_date.day
end

然后我有一条路线:get 'foo/:day/:id' => 'foo#show', as: 'foo'

现在,调用foo_url(Foo.first)会导致 UrlGenerationError ...缺少必需的键:[:day] ,因为Foo.first只返回id: 1, some_date: '...'而不包括({虚拟)day属性。

在这种情况下,如何确保我的虚拟属性被视为常规属性,从而调用foo_url?

1 个答案:

答案 0 :(得分:0)

看看to_param方法,我认为这就是你需要的。

  

返回一个String, Action Pack用于构建URL的字符串   此对象。默认实现将此记录的id作为a返回   字符串,如果此记录未保存,则为nil。

class User < ActiveRecord::Base
  def to_param  # overridden
    name
  end
end

user = User.find_by_name('Phusion')
user_path(user)  # => "/users/Phusion"