此问题是对上一个问题的跟进: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
答案 0 :(得分:2)
由于您还没有持久用户,请通过以下方式将其设为收集操作:
invite_user_path
更改为invite_users_path
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)