自定义Rails路由

Jas*_*ett 1 routing ruby-on-rails

我有一个名为的模型appointment,我想改变"新"页面的工作方式.当用户点击日历上的某个小时位置时,我希望用户转到带有以下URL的页面:

appointment/new/hour/10
Run Code Online (Sandbox Code Playgroud)

这将使用户进入"新"页面,并且预约的时间将在上午10:00预先填充.

我熟悉symfony路由,但我发现Rails路由有点令人困惑.具体来说,我不知道如何编写我的link_to函数调用,它会给我一个像上面这样的URL.

我已经给了一些调频器,但我没有找到一个超出我想做的事情的地方.如果有人可以解释如何做我正在尝试做的事情,或者只是简单地指出相关的文档,那将是非常棒的.

idl*_*ers 5

在您的routes.rb中,您可以创建一条路线,例如:

# Rails 3
match 'appointment/new/hour/:hour' => "appointments#new", :as => :new_appointment_with_time

# Rails 2
map.new_appointment_with_time 'appointment/new/hour/:hour', :controller => "appointments", :action => "new"
Run Code Online (Sandbox Code Playgroud)

然后,您可以在链接中使用它:

link_to "10am", new_appointment_with_time_path(:hour => 10)
Run Code Online (Sandbox Code Playgroud)

在控制器中,您可以检索该值并使新的约会实例使用它params[:hour]:

@appointment = Appointment.new(:hour => params[:hour])
Run Code Online (Sandbox Code Playgroud)