2015-04-05 68 views
0

我的模型具有some_date领域,像这样的一个getter:我如何让Rails 4处理真正的虚拟属性?

def day 
    some_date.day 
end 

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

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

如何确保我的虚拟属性在这种情况下与普通虚拟属性一样对待,从而调用foo_url工作?

+0

难道是令人满意的做'foo_url(Foo.first,天:Foo.first.day)'?这应该工作。 – SteveTurczyn 2015-04-05 16:22:22

+0

实际情况下,每次调用都需要至少四个附加属性来传递。这就是为什么我想避免这种变体。 – user569825 2015-04-05 16:40:32

+0

如果他们都是同一模型的所有属性,你不能只有一个路径,使用:id和检索目标操作中的属性? – SteveTurczyn 2015-04-05 16:46:39

回答

0

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

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

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

user = User.find_by_name('Phusion') 
user_path(user) # => "https://stackoverflow.com/users/Phusion"