【问题标题】:Create 2 Models at the same time同时创建2个模型
【发布时间】:2012-05-13 20:42:56
【问题描述】:

好的,我已经搜索了很多地方,但找不到我可以开始工作的解决方案......所以我决定在这里发帖。

我有两个模型

商店

class Store < ActiveRecord::Base
  attr_accessible :storeimage, :storename
  belongs_to :user

  validates :user_id, :presence => true  
end

用户

class User < ActiveRecord::Base 
  attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :userimage, :remove_userimage
  has_secure_password
  has_many :gears
  has_many :comments, :dependent => :destroy 
  has_one :store, :dependent => :destroy
  before_save :create_remember_token
  require 'carrierwave/orm/activerecord'
  mount_uploader :userimage, UserpicUploader
  accepts_nested_attributes_for :store

  ...

end

当有人创建新用户帐户时,我需要自动为该用户创建一个新商店,我在用户表单中考虑。那么如何创建一个链接到正在创建的新用户的新商店对象?

这是我的 CreateAction 用户控制器

中的代码
  def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      redirect_to @user, :flash => {:success => "Welcome to Equiptme"}
    else
      render 'new'
      @title = "Sign up"
    end
  end

查看

<div class="signup_container">
    <div class="signup_container_interior">
    <%= provide(:title, 'Sign up') %>
    <%= form_for(@user) do |f| %>
    <% if @user.errors.any? %>
      <div>
        <div>
          The form contains <%= pluralize(@user.errors.count, "error") %>.
        </div>
        <ul>
        <% @user.errors.full_messages.each do |msg| %>
          <li>* <%= msg %></li>
        <% end %>
        </ul>
      </div>
    <% end %>
      <div class="register_field">  
        <div class="register_nonerror_container">
            <%= f.label :first_name %>&nbsp;<%= f.text_field :first_name, class: 'register_text_area' %>
        </div>
      </div>
      <div class="register_field">
        <div class="register_nonerror_container">
            <%= f.label :last_name %>&nbsp;<%= f.text_field :last_name, class: 'register_text_area' %>
        </div>
      </div>
      <div class="register_field">
        <div class="register_nonerror_container">
            <%= f.label :email %>&nbsp;<%= f.text_field :email, class: 'register_text_area' %>
        </div>
      </div>
    <!--************STORE FIELDS ************** -->

    <!--************STORE FIELDS END ************** --> 

      <div class="register_field">
        <div class="register_nonerror_container">
            <%= f.label :password %>&nbsp;<%= f.password_field :password, class: 'register_text_area' %>
        </div>
      </div>
      <div class="register_field">
        <div class="register_nonerror_container">
            <%= f.label :password_confirmation %>&nbsp;<%= f.password_field :password_confirmation, class: 'register_text_area' %>
        </div>
      </div>
      <div class="actions">
        <%= f.submit "Create Account", class: 'register_button' %>
      </div>
    <% end %>
    </div>
</div>

【问题讨论】:

标签: ruby-on-rails forms model


【解决方案1】:

您可以使用build_association method 与用户和商店之间的has_one 关系一起创建:

def create
  @user = User.new(params[:user])
  @user.build_store

  # etc
end

如果您在保存用户之前不需要商店,您也可以使用create_association

  if @user.save
    @user.create_store
    # etc
  end

【讨论】:

  • 我决定使用 create_association。如何传递类似 :storename 的参数?
  • 就像你在调用 create 一样:@user.create_store(:storename =&gt; 'House of Pancakes')
  • 谢谢你..我想我理解那部分。我不确定如何在用户表单中传递 Store 参数。我发表了我的看法。我试图在嵌套表单上使用 railscasts 更新剧集上发布的方法,但它不起作用。
【解决方案2】:

【讨论】:

  • 我看到了这一集,但我无法让它用于创建和更新。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多