0

我是 Ruby on Rails 的新手,也许有人可以帮助我。

我有一个关联,我想知道是否需要一个控制器来将数据保存到数据库表中?

我有user.rb模型

has_many :businesses

我有business.rb模型

belongs_to :user

我在业务迁移文件中有这个

class CreateBusinesses < ActiveRecord::Migration
  def change
    create_table :businesses do |t|
      t.integer :user_id
      t.string :name
      t.string :street
      t.string :state
      t.string :city
      t.integer :zip

      t.timestamps
    end
  end
end

我想知道是否需要创建一个控制器文件来将数据保存到业务表中?

我在views/users/profile.html.erb页面中有这样的东西

<%= form_for(@user) do |f| %>
  <div class="field">
    <%= f.label :company_name %>
    <%= f.text_field :company_name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

如何设置此表单,以便我可以将我的 :company_name 保存到企业的表 :name 中,因此我还可以将 :street、:state 等添加到此表单中?

我只生成了一个模型,还没有用于业务的控制器。

谢谢!

4

2 回答 2

2

您不一定需要业务控制器,但您需要用户控制器。您可以让您的用户控制器通过嵌套属性为您的用户保存关联的对象。

首先,允许您的用户模型接受业务关系的嵌套属性:

用户.rb

accepts_nested_attributes_for :business

然后将 fields_for 业务对象添加到您的用户表单中:

<%= form_for(@user) do |f| %>
  <div class="field">
    <%= f.label :company_name %>
    <%= f.text_field :company_name %>
  </div>

  <%= fields_for :business do |fields| %>
    <%= fields.text_field :name %>
  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

业务属性将作为参数的一部分出现user => {:name => 'Jim', :business_attributes => {:name => 'Jims business'}}

然后,您可以在用户控制器的 create 或 update 调用中将这些直接传递到用户对象的更新中:

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

业务参数将由accepts_nested_attributes功能处理!

上面的示例解释了一个单实例示例,因为您有一个has_many关系,您需要以上面的内容为起点,并学习如何调整它以允许许多子项。下面是一些资源来帮助你学习这一点,而不是给你整个代码而你什么都学不到!

于 2013-06-02T20:14:59.520 回答
0

当然你需要一个控制器。不一定是同一个控制器,但需要一个。

需要控制器来连接视图和模型。没有它,当您提交数据时,就无法发送数据。显然,数据库不会以这种方式修改。如果没有控制器中的操作,您甚至无法显示您的视图。

没有相应容器的模型仅在与其他模型紧密连接时使用,例如论坛评论对。所以你可以让用户控制器来处理业务数据,但这并不推荐。

于 2013-06-02T20:09:35.333 回答