【问题标题】:Rails two related models in one form not saving一种形式的Rails两个相关模型不保存
【发布时间】:2013-04-26 08:56:41
【问题描述】:

我的表单字段是:

 <%= form_tag signup_path, :class=>"no-ajax form-signin" do %>
    <fieldset>
      <legend>Company</legend>
      <div class="field">
        <label>Company Name</label>
        <%= text_field :company, :name, :class => "input-block-level" %>
      </div>

      <%= hidden_field :company, :accounttype_id, :value => 2 %>
    </fieldset>



    <fieldset>
      <legend>User</legend>
        <div class="field">
          <label>First Name</label>
          <%= text_field :user, :first_name, :class => "input-block-level" %>
        </div>
        <div class="field">
          <label>Last Name</label>
          <%= text_field :user, :last_name, :class => "input-block-level" %>
        </div>
        <div class="field">
          <label>Email</label>
          <%= text_field :user, :email, :class => "input-block-level" %>
        </div>

        <div class="field">
          <label>Role</label>
          <%= text_field :user, :role_id, :value => 2 %>
        </div>

      </fieldset>

      <fieldset>
        <div class="field">
          <label>Password</label>
          <%= text_field :user, :password, :class => "input-block-level" %>
        </div>
        <div class="field">
          <label>Confirm Password</label>
          <%= text_field :user, :password_confirmation, :class => "input-block-level" %>
        </div>
      </fieldset>

      <div class="form-actions">
        <%= submit_tag 'Sign Up', :class => "btn btn-large btn-success btn-block" %>
      </div>
  <% end %>

我的表单控制器是:

  def signup
    @company = Company.new
    @user = @company.users.build
    if @company.save
      redirect_to :action => 'success'
    else
      render :action => 'signup'
    end
  end

当我保存时,它说它失败了。

这是发布的数据(从 rails 控制台粘贴):

{"utf8"=>"✓", "authenticity_token"=>"9y4JeSvm34P05FBKbP3D3aToHlwejFZBkSyPbmGMJrk=", "company"=>{"name"=>"Test Co", "accounttype_id"=>"2"}, "user"=>{"first_name"=>"Andy", "last_name"=>"Bernard", "email"=>"andy@testco.com", "role_id"=>"2", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign Up"}
  1. 什么是表单无法保存
  2. 有没有更好的方法来完成这个过程? (创建新公司,然后创建链接到该公司的用户,所有这些都在一个表单中)

【问题讨论】:

    标签: ruby-on-rails-3 activerecord rails-models


    【解决方案1】:

    控制器中的signup 操作不会保存@company,因为在调用Company.new 时没有传递任何属性。

    @company = Company.new(params[:company])
    

    将传递参数"company"=&gt;{"name"=&gt;"Test Co", "accounttype_id"=&gt;"2"}

    "user"=&gt;{...} 也是如此:

    @user = @company.users.build(params[:user])
    

    对于一体式表单,Rails 提供了以下方法accepts_nested_attributes_for,它允许您一次性创建公司和用户。

    【讨论】:

      猜你喜欢
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      相关资源
      最近更新 更多