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

ビジネス コントローラーは必ずしも必要ではありませんが、ユーザー コントローラーが必要になります。ネストされた属性を使用して、ユーザー コントローラーにユーザーの関連オブジェクトを保存させることができます。

まず、ユーザー モデルがビジネス関係のネストされた属性を受け入れるようにします。

user.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

もちろんコントローラーは必要です。必ずしも同じコントローラーではありませんが、1 つ必要です。

ビューとモデルを接続するにはコントローラーが必要です。データを送信するときにそれがなければ、送信するアクションはありません。明らかに、データベースはこの方法では変更されません。コントローラーでアクションを行わないと、ビューを表示することさえできません。

対応するコンテナーのないモデルは、フォーラムとコメントのペアのように、他のモデルに密接に関連付けられている場合にのみ使用されます。そのため、ユーザー コントローラーにビジネス データの処理を任せることができますが、これはあまりお勧めできません。

于 2013-06-02T20:09:35.333 に答える