RoR:将表单数据保存到两个数据库表中

时间:2013-09-30 07:02:23

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-3.1

我有一个用户输入信息的表单。但我还想将其中一个输入字段数据保存到另一个表中。

我有User表和Business

<%= form_for @user, :html => {:multipart => true} do |f| %>
  ... some input fields
  <%= f.text_field :company_name %>
  ... more input fields
  <%= f.submit "Save" %>
<% end %>

我的控制器是这样的:

def edit
  @user = User.find(current_user.id)
  @biz = Business.find_or_create_by_name(params[:company_name])
  @biz.save
end 

它将数据保存在用户表中,但不将数据保存到Business表中。

1 个答案:

答案 0 :(得分:1)

一些事情。当edit显示表单并且update处理PUT(以及更新属性)时,Rails会喜欢它。如果这样做,您的方法将如下所示。

def edit
  @user = User.find(current_user.id)
end 

def update
  @user = User.find(current_user.id)
  @user.update_attributes(params[:user])
end 

如果使用用户参数提交公司名称,我还会使用逻辑在用户模型中创建业务。

在User.rb

validates_length_of :business_name, :minimum => 2, :allow_blank => true

attr_accessor :business_name

before_validation :ensure_business

def ensure_business
  if business_name.present?
    b = Business.where(:name => business_name).first_or_create
    self.business_id = b.id
  end
end