Ruby on Rails:自定义操作(跟进)

时间:2011-07-12 18:35:14

标签: ruby-on-rails-3 routes custom-routes

此问题是对上一个问题的跟进:Ruby on Rails: Custom actions

作为后续,在form_for中使用自定义操作的语法是什么?对于我的应用程序,我有一个名为_invite_form.html.erb的部分,并将表单设置为:url规范,我认为会将表单链接到Users控制器上的邀请操作:

 <div id = "invite_form">
<h1>Invite</h1> 
<%= form_for(invited, :url => invite_user_path) do |f| %>
    <div class="field">
        <%= f.text_field :email, :class => "inputform round", :placeholder => "email" %>
    </div>
    <div class="actions">
        <%= f.submit "Invite", :class => "submit_button round" %>
    </div>  
<% end %>
 </div>

在某些页面上调用此部分,并给出此错误:

  "No route matches {:action=>"invite", :controller=>"users"}"

在我的routes.rb文件中,我包含了相应的行:

 resources :users do
     member do
      get :invite
      post :invite
    end
 end

为什么路线不起作用?如何更改这些文件以使表单在Users控制器上使用“Invite”操作?

**忘记提及:我在用户帮助中定义了邀请:users_helper.rb:

 module UsersHelper
   def invited
     @invited = User.new(params[:user])
   end
 end

2 个答案:

答案 0 :(得分:2)

由于您还没有持久用户,请通过以下方式将其设为收集操作:

  1. 在控制器中将invite_user_path更改为invite_users_path
  2. 在路线中将member do更改为collection do

答案 1 :(得分:1)

invite_user_path期望用户作为参数。试试invite_user_path(invited)。在计算路径之前,您还需要save用户。

要进行实验,请转到rails console并查看以下内容之间的区别:

app.invite_user_path
app.invite_user_path(User.first)
app.invite_user_path(User.new)