Ruby on rails RoR:将表单数据保存到两个数据库表中
我有一个用户输入信息的表单。但我还想将一个输入字段数据保存到另一个表中 我有Ruby on rails RoR:将表单数据保存到两个数据库表中,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.2,ruby-on-rails-3.1,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" %> <
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 %>
它将数据保存在用户表中,但不将数据保存到业务表中。有几件事。Rails喜欢在
edit
显示表单和update
处理PUT(和更新属性)时使用它。如果您这样做,您的方法将如下所示
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
商业模式中是否有任何验证?@tihom目前没有。我想设置一个,但您是否尝试过
业务。通过名称(参数[:user][:company\u name])查找或创建\u
?@vinodadhikary我得到了未定义的方法'[],用于nil:NilClass
?知道我为什么会得到这个吗?这个方法看起来可能有效,但是我应该把这个方法确保\u business
放在什么地方来调用它吗?或者rails在验证之前是否经过,并在自动保存之前调用该方法?请将其放入user.rb。当您尝试保存用户时,将调用它。它可能是一个before_save-它取决于用户和业务对象的业务逻辑。我已经将它放在了我的模型中,但它没有保存到我的业务表中。我是否遗漏了一些东西?您的业务模型是否有任何验证?不,目前没有验证,这就是它不起作用的原因吗?
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