0

这个问题是对上一个问题的跟进:Ruby on Rails:自定义操作

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

 <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_helper.rb:

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

2 回答 2

2

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

  1. 在您的控制器中更改invite_user_pathinvite_users_path
  2. 在您的路线中更改member docollection do
于 2011-07-13T15:24:00.813 回答
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)
于 2011-07-12T19:44:05.080 回答