【问题标题】:Ruby on Rails: Custom Actions (Follow up)Ruby on Rails:自定义操作(跟进)
【发布时间】:2011-07-12 18:35:14
【问题描述】:

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

作为后续,在 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中定义了邀请:users_helper.rb:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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)
      

      【讨论】:

      • 我怀疑这是因为受邀用户还是新用户,因此尚未分配id,因此(还)没有分配 URL。
      • 是的,我同意 - 但就是这样。我有其他表单可以链接到用户创建操作,这些链接可以通过罚款,并正确处理用户和链接。但是要使用自定义操作(邀请)进行相同的操作,我找不到方法。关于解决方案的任何想法?非常感谢您的意见!
      • 请求之间未保存到数据库的用户将永远丢失。因此,在生成表单的请求中没有saveUser.new 没有任何意义。相反,您可能想要做的是让邀请请求成为collection 而不是member 操作,并让invite 操作执行User.new。当您使用来自 params[:user] 哈希的值生成表单时,您最多需要做的是预先填写一些(可能是隐藏的)字段。
      • 嗯,我还是 ruby​​ 新手 - 你知道有什么好地方可以阅读收集与成员操作吗?
      • 嗯,我不认为这是集合与成员操作的问题。我想知道它是否与“invited”变量的初始化方式有关?通常说@invited 或被邀请=User.new 使表单提交到用户控制器上的“创建”操作。但我希望它初始化并提交到“邀请”操作..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多