Ruby on rails 如何将对象从表单_for helper传递到方法?

Ruby on rails 如何将对象从表单_for helper传递到方法?,ruby-on-rails,Ruby On Rails,假设我有一个表单被发送到一个陌生的地方(我们所说的陌生是指,不是默认的路径: <% form_for @form_object, :url => {:controller => 'application', :action => 'form_action_thing'} do |f| %> <%= f.text_field :email %> <%= submit_tag 'Login' %> &l

假设我有一个表单被发送到一个陌生的地方(我们所说的陌生是指,不是默认的路径:

<% form_for @form_object, :url => {:controller => 'application',
                  :action => 'form_action_thing'} do |f| %>
  <%= f.text_field :email %>
  <%= submit_tag 'Login' %>
<% end %>
因此,我的问题是:

  • 如何使对象
    @form\u object
    可供接收方法使用(在本例中为
    form\u action\u tag
    )?
    • 我试过
      params[:form_object]
      ,我也搜索过API,我必须在下面发布,因为SO不相信我不是垃圾邮件发送者(我是新成员),也在谷歌上搜索了尽可能多的这个想法的排列。没什么。抱歉,如果我错过了什么,我真的在尝试
  • 一旦我让这个对象可以被这个方法访问,我该如何处理它呢?我猜不是
    params[:form_object]
  • 编辑 非常感谢你们的回复,伙计们!我真的很感激。我学到了我的一课,那就是你不应该从表单中深度复制一个对象,并且表单的参数在你提交表单时会被包含在内


    我承认,不知道看起来如此明显的东西有点令人沮丧…

    你需要在url中传递“@form\u对象”的“id”,然后查找该对象(假设你有一个模型并使用ActiveRecord)

    你需要在url中传递“@form\u对象”的“id”,然后查找该对象(假设您有一个模型并使用ActiveRecord)

    这取决于您如何设置路由。如果您使用默认的/:controller/:action/:id路由,则可以将其作为URL中的参数传递。请注意,不能/应该传递整个@form_对象,而应该传递它的id或某些其他属性来标识它。在这种情况下,您应该使URL:

    <% form_for @form_object, :url => {:controller => 'application',
                      :action => 'form_action_thing', :email => some_email} do |f| %>
      <%= f.text_field :email %>
      <%= submit_tag 'Login' %>
    <% end %>
    

    这取决于您如何设置路由。如果您使用默认的/:controller/:action/:id路由,您可以将其作为URL中的参数传递。请注意,不能/不应该传递整个@form_对象,但它是标识它的id或其他一些属性。在这种情况下,您应该将URL设置为:

    <% form_for @form_object, :url => {:controller => 'application',
                      :action => 'form_action_thing', :email => some_email} do |f| %>
      <%= f.text_field :email %>
      <%= submit_tag 'Login' %>
    <% end %>
    

    您可以通过url传递参数,但在提交表单时,唯一应该(可能)通过url传递的是RESTful记录的记录id

    而且您似乎还没有在
    参数中找到表单数据的位置

    所以

    • 表单中的所有数据都应该以
      参数[:form\u object]
      结束。
      :form\u object
      的实际值由Rails选择,它可能来自对象的类(现在懒得查找)
    • 在任何情况下,您都可以通过查看控制台/日志输出轻松找到表单值的提交位置。每个请求的所有参数都转储在那里
    • 表单字段将位于参数内,如
      params[:form_object][:email]
      -提交的每个字段都有一个与字段名对应的条目
    • 参数
      散列包含
      @form_对象
      中的所有原始值。表单中将只包含这些值
    • 如果需要将不可编辑的值与表单一起传递给控制器,请使用
      隐藏字段
      (s)。这些值将与表单一起提交,但用户不可见

    您可以通过url传递参数,但在提交表单时,唯一应该(可能)通过url传递的是RESTful记录的记录id

    而且您似乎还没有在
    参数中找到表单数据的位置

    所以

    • 表单中的所有数据都应该以
      参数[:form\u object]
      结束。
      :form\u object
      的实际值由Rails选择,它可能来自对象的类(现在懒得查找)
    • 在任何情况下,您都可以通过查看控制台/日志输出轻松找到表单值的提交位置。每个请求的所有参数都转储在那里
    • 表单字段将位于参数内,如
      params[:form_object][:email]
      -提交的每个字段都有一个与字段名对应的条目
    • 参数
      散列包含
      @form_对象
      中的所有原始值。表单中将只包含这些值
    • 如果需要将不可编辑的值与表单一起传递给控制器,请使用
      隐藏字段
      (s)。这些值将与表单一起提交,但用户不可见

    这是我看过的另一个网站:这是我看过的另一个网站:如果你在定义电子邮件输入字段,你不必在
    :url
    中将其定义为参数。啊,我明白了,非常感谢。有时我会觉得我不知道这些事情很傻。鉴于你的答案很简单,我似乎可以找到它你自己。我可以问一下你会在哪里查找吗?是的,我没有注意到
    f.text_字段:email
    param。这让我问:如果你发送表单对象,你为什么需要在控制器中通过电子邮件查找表单对象?你可以在Rails指南中找到更多关于表单帮助者的信息()。如果您是Rails新手,则非常推荐此指南:)如果你要定义电子邮件输入字段,你不必在
    :url
    中将其定义为参数。啊,我明白了,真的非常感谢。有时我会觉得自己不知道这些事情很傻。考虑到你答案的简单性,我似乎可以自己找到它。我可以问一下你会在哪里找到它吗?是的,我没有注意到
    f。text_field:email
    param。这让我不禁要问:如果你想编辑或创建一个FormObject,为什么你需要在控制器中通过电子邮件查找它?你可以在Rails指南()中找到更多关于表单助手的信息。如果你是Rails新手,建议你使用此指南:)谢谢
    def form_action_thing
      @user = User.find_by_email(params[:email])
    end