Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RoR:将表单数据保存到两个数据库表中_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.2_Ruby On Rails 3.1 - Fatal编程技术网

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