无法在Ruby on Rails 3.1中创建自定义路由

时间:2011-11-11 22:16:11

标签: ruby routing controller ruby-on-rails-3.1

我似乎无法设置自定义网址。所有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。任何线索为什么?我认为这是我的问题。

3 个答案:

答案 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是要搜索的列,则为