所以,假设我有一个表格被发送到奇怪的地方(我们的意思是奇怪,不是默认路线:
<% form_for @form_object, :url => {:controller => 'application',
:action => 'form_action_thing'} do |f| %>
<%= f.text_field :email %>
<%= submit_tag 'Login' %>
<% end %>
现在让我们说我们有接受它的方法。
def form_action_thing
User.find(????? :email ?????)
end
我的问题是:
@form_object
可用于接收方法(在本例中为form_action_tag
)?
params[:form_object]
,我已经搜索了this site和API,我必须在下面发帖,因为我不相信我不是垃圾邮件发送者(我是一个新成员),以及Google可以想到的这个想法的许多排列。没有。对不起,如果我错过了什么,我真的很想。params[:form_object]
,我猜。非常感谢你的回复,伙计们!对此,我真的非常感激。我吸取了教训,那就是你不应该从表单中深层复制一个对象,并且当你提交表单时,实际上会包含一个表单的参数。
我会承认,虽然不知道看起来那么明显的东西但是有点令人沮丧......
答案 0 :(得分:1)
你需要在url中传递“@form_object”的“id”,然后查找该对象(假设你有一个模型并使用ActiveRecord)
答案 1 :(得分:0)
这取决于您如何设置路线。如果您使用默认的/:controller /:action /:id路由,则可以将其作为URL中的参数传递。请注意,不是可以/应该传递整个@form_object,而是使用id或其他属性来识别它。在这种情况下,您应该建立您的网址:
<% form_for @form_object, :url => {:controller => 'application',
:action => 'form_action_thing', :email => some_email} do |f| %>
<%= f.text_field :email %>
<%= submit_tag 'Login' %>
<% end %>
在您的控制器中
def form_action_thing
@user = User.find_by_email(params[:email])
end
答案 2 :(得分:0)
您可以通过url传递参数,但是在提交表单时,唯一应该(可能)通过url传递的是RESTful记录的记录ID。
您似乎还没找到params
中可以找到表单数据的位置。
所以
params[:form_object]
结尾。 :form_object
的实际值是由Rails选择的,它可能来自对象的类(现在看起来太懒了)params[:form_object][:email]
之类的参数内 - 提交的每个字段都有一个与字段名称对应的条目。params
哈希不包含@form_object
中的所有原始值。只有表格中包含的那些值。hidden_field
(s)这些将随表单一起提交,但对用户不可见。