我似乎无法设置自定义网址。所有RESTful路由都可以正常工作,但我无法弄清楚如何简单地将/:unique_url
添加到我在模型中创建的现有路由(一个简单的4个字符的随机字符串),并将作为“永久链接”各种。
的routes.rb
resources :treks
match ':unique_url' => 'treks#mobile'
控制器
.
.
def mobile
@trek = trek.find(params[:id])
end
这是因为我正在尝试在现有资源上定义自定义操作吗?我是否可以在与具有资源的控制器相同的控制器上创建自定义方法?
顺便说一句,当我将routes.rb
更改为match 'treks/:id/:unique_url' => treks#mobile
时,它工作正常,但我只想让网址只是/:unique_url
更新 似乎find_by_[parameter]
是要走的路......
我一直在玩控制台,我似乎无法获得任何方法......我可以运行Trek.last.fullname
例如,但无法运行@trek = Trek.last
...然后例如,呼叫... @trek.lastname
。任何线索为什么?我认为这是我的问题。
答案 0 :(得分:1)
Trek上还有一个存储其独特网址的字段吗?如果是这样,你应该做这样的事情:
@trek = Trek.find_by_url(params[:unique_url])
答案 1 :(得分:0)
trek.find_by_unique_url( params[:unique_url] ) # should do the trick
@pruett不,find_by_XXX
方法是通过Ruby的method_missing调用即时生成的!因此,您可以使用在模型中定义的任何属性而不是XXX。
您甚至可以列出多个属性,例如:
find_by_name_and_unique_url( the_name, the_unigue_url)
检查这些页面:
http://guides.rubyonrails.org/active_record_querying.html
http://m.onkey.org/active-record-query-interface
如果您获得undefined method ... for nil:NilClass
,则表示您尝试调用该方法的对象不存在,例如没有。
您可能只是错过了在该行之前添加if语句以确保该对象为非零
答案 2 :(得分:-1)
嗯。我通常会做这样的事情:
map.connect "/:unique_url", :controller => "treks", :action => "mobile"
然后在该控制器中,该ID不适用..您需要将其更改为:
def mobile
@trek = trek.find_by_unique_url(params[:unique_url])
end
(如果unique_url是要搜索的列,则为
)