Ruby on rails 3 ActiveResource、模型和表单标签

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_标记将表单捕获的参数传递给我的用户控制器。我正在尝试与Sinatra服务器通信,因此客户端上没有数据库。我的看法如下:

 <% 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_标记(@user)do
      :用于表示不与任何模型绑定的简单表单。您可以将form_标记中的标记命名为类似于form for的标记,但是为什么不直接使用form_for呢。显然,助手的第一个参数是目标url,在这个特殊的例子中,rails神奇地从
      @user
      识别url,而您没有注意到任何错误
    • form_for(@user)do | f |
      :用于为模型创建表单,并将表单与传递给它的模型实例绑定在一起。form_for的块接收一个对象,该对象与
      文本字段标签
      标签标签
      等等价。例如
      文本字段
      标签
  • label\u-tag
    -->
    f.label
    :第一个是普通标记,它只创建一个标签标记,而不附加任何魔法。后者与模型对象相关,并遵循与前者不同的命名和id约定。它还与字段的值有关,即,如果字段有错误(验证失败),则标签将被一个带有class
    fields\u带有\u error
    的div标记所包围,或者我记不起类名

  • text\u field\u tag
    -->
    f.text\u field
    :前者将创建一个名为
    first\u name
    的字段,不附加任何魔法。后者遵循命名约定,输入字段将命名为
    user[first\u name]
    ,这样当您执行
    params[:user]
    时,您将在那里获得一个
    first\u name
    参数。它还与html输入字段的值相关,即,您可以获得与label相同的错误功能,并且您还可以使用模型实例中值字段的任何内容自动预填充输入


对于您的表单,您需要执行以下操作

<%= 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_标记(@user)do
      :用于表示不与任何模型绑定的简单表单。您可以将form_标记中的标记命名为类似于form for的标记,但是为什么不直接使用form_for呢。显然,助手的第一个参数是目标url,在这个特殊的例子中,rails神奇地从
      @user
      识别url,而您没有注意到任何错误
    • form_for(@user)do | f |
      :用于为模型创建表单,并将表单与传递给它的模型实例绑定在一起。form_for的块接收一个对象,该对象与
      文本字段标签
      标签标签
      等等价。例如
      文本字段
      标签
  • label\u-tag
    -->
    f.label
    :第一个是普通标记,它只创建一个标签标记,而不附加任何魔法。后者与模型对象相关,并遵循与前者不同的命名和id约定。它还与字段的值有关,即,如果字段有错误(验证失败),则标签将被一个带有class
    fields\u带有\u error
    的div标记所包围,或者我记不起类名

  • text\u field\u tag
    -->
    f.text\u field
    :前者将创建一个名为
    first\u name
    的字段,不附加任何魔法。后者遵循命名约定,输入字段将命名为
    user[first\u name]
    ,这样当您执行
    params[:user]
    时,您将在那里获得一个
    first\u name
    参数。它还与html输入字段的值相关,即,您可以获得与label相同的错误功能,并且您还可以使用模型实例中值字段的任何内容自动预填充输入

  • 您需要将form_用于而不是form_标记。(@user)do的表单
  • 在模型中,您需要创建一个模式。没有它,Rails不知道如何处理您输入表单中的数据
  • 将对象传递到参数散列中时,请使用:user而不是@user@user=user.new(参数[:user])
  • 您需要将form_用于而不是form_标记。(@user)do的表单
  • 在模型中,您需要创建一个模式。没有它,Rails不知道如何处理您输入表单中的数据
  • 将对象传递到参数散列中时,请使用:user而不是@user@user=user.new(参数[:user])

  • 你能更详细地解释一下为什么这些改变是必要的吗?谢谢你的回复。正如您前面所描述的,我以前尝试过form_,但是表单会预先填充“{}”,并且与模型关联的params散列会将整个散列放入每个键中。例如::first_name=>{:first_name…:last_name…:email…等)。在使用表单捕获参数时,last_name键、email键等都具有相同的哈希值。这仅在ActiveResource中发生。您有何建议?感谢您的支持
    @user = User.new(params[:user])