Ruby on rails 3 ActiveResource、模型和表单标签
我试图使用form_标记将表单捕获的参数传递给我的用户控制器。我正在尝试与Sinatra服务器通信,因此客户端上没有数据库。我的看法如下:Ruby on rails 3 ActiveResource、模型和表单标签,ruby-on-rails-3,forms,activeresource,Ruby On Rails 3,Forms,Activeresource,我试图使用form_标记将表单捕获的参数传递给我的用户控制器。我正在尝试与Sinatra服务器通信,因此客户端上没有数据库。我的看法如下: <% form_tag(@user) do %> <div class="field"> <%= label_tag :first_mame %><br /> <%= text_field_tag :first_name %> </div> <div class="field
<% form_tag(@user) do %>
<div class="field">
<%= label_tag :first_mame %><br />
<%= text_field_tag :first_name %>
</div>
<div class="field">
<%= label_tag :last_name %><br />
<%= text_field_tag :last_name %>
</div>
<div class="field">
<%= label_tag :email %><br />
<%= text_field_tag "user[email]" %>
</div>
<div class="field">
<%= label_tag :device_id %><br />
<%= text_field_tag "user[device_id]" %>
</div>
<div class="field">
<%= label_tag :type %><br />
<%= text_field_tag "user[device_type]" %>
</div>
<div class="actions">
<%= submit_tag %>
</div>
<% end %>
结束
下面是我得到的结果=>期望属性散列,得到nil
有人知道为什么吗?谢谢您的帮助。有关您需要填写的表格
<%= form_for @user do |f| %>
<div class="field">
<%= f.label :first_name %>
<%= f.text_field :first_name %>
</div>
# more fields
<% end %>
更新:
-->
:这只是rails3中的惯例,当您想要在响应中写入内容时,您应该稍后使用(使用
符号)。早期仍然有效,但已被弃用=
-->表单标签(@user)do
表单标签(@user)do | f |
:用于表示不与任何模型绑定的简单表单。您可以将form_标记中的标记命名为类似于form for的标记,但是为什么不直接使用form_for呢。显然,助手的第一个参数是目标url,在这个特殊的例子中,rails神奇地从form_标记(@user)do
识别url,而您没有注意到任何错误@user
:用于为模型创建表单,并将表单与传递给它的模型实例绑定在一起。form_for的块接收一个对象,该对象与form_for(@user)do | f |
,文本字段标签
等等价。例如标签标签
,文本字段
标签
-->label\u-tag
:第一个是普通标记,它只创建一个标签标记,而不附加任何魔法。后者与模型对象相关,并遵循与前者不同的命名和id约定。它还与字段的值有关,即,如果字段有错误(验证失败),则标签将被一个带有classf.label
的div标记所包围,或者我记不起类名fields\u带有\u error
-->text\u field\u tag
:前者将创建一个名为f.text\u field
的字段,不附加任何魔法。后者遵循命名约定,输入字段将命名为first\u name
,这样当您执行user[first\u name]
时,您将在那里获得一个params[:user]
参数。它还与html输入字段的值相关,即,您可以获得与label相同的错误功能,并且您还可以使用模型实例中值字段的任何内容自动预填充输入first\u name
<%= form_for @user do |f| %>
<div class="field">
<%= f.label :first_name %>
<%= f.text_field :first_name %>
</div>
# more fields
<% end %>
更新:
-->
:这只是rails3中的惯例,当您想要在响应中写入内容时,您应该稍后使用(使用
符号)。早期仍然有效,但已被弃用=
-->表单标签(@user)do
表单标签(@user)do | f |
:用于表示不与任何模型绑定的简单表单。您可以将form_标记中的标记命名为类似于form for的标记,但是为什么不直接使用form_for呢。显然,助手的第一个参数是目标url,在这个特殊的例子中,rails神奇地从form_标记(@user)do
识别url,而您没有注意到任何错误@user
:用于为模型创建表单,并将表单与传递给它的模型实例绑定在一起。form_for的块接收一个对象,该对象与form_for(@user)do | f |
,文本字段标签
等等价。例如标签标签
,文本字段
标签
-->label\u-tag
:第一个是普通标记,它只创建一个标签标记,而不附加任何魔法。后者与模型对象相关,并遵循与前者不同的命名和id约定。它还与字段的值有关,即,如果字段有错误(验证失败),则标签将被一个带有classf.label
的div标记所包围,或者我记不起类名fields\u带有\u error
-->text\u field\u tag
:前者将创建一个名为f.text\u field
的字段,不附加任何魔法。后者遵循命名约定,输入字段将命名为first\u name
,这样当您执行user[first\u name]
时,您将在那里获得一个params[:user]
参数。它还与html输入字段的值相关,即,您可以获得与label相同的错误功能,并且您还可以使用模型实例中值字段的任何内容自动预填充输入first\u name
你能更详细地解释一下为什么这些改变是必要的吗?谢谢你的回复。正如您前面所描述的,我以前尝试过form_,但是表单会预先填充“{}”,并且与模型关联的params散列会将整个散列放入每个键中。例如::first_name=>{:first_name…:last_name…:email…等)。在使用表单捕获参数时,last_name键、email键等都具有相同的哈希值。这仅在ActiveResource中发生。您有何建议?感谢您的支持
@user = User.new(params[:user])