0

has_and_belongs_to_many 関係が必要なプロジェクトに取り組んでいます。

これには、多くの「提案」を持つユーザーと、多くのユーザーに属する提案が含まれます。

ユーザーはプロポーザルを作成し、他のユーザーを招待できるため、これは重要です。

これを正しく設定するのに問題があり、他の多くのチュートリアルと SO の質問を読みましたが、並べ替えることができません。

これが私がこれまでに持っているものです。

User.rb

class User < ActiveRecord::Base
  has_and_belongs_to_many :proposals
 .......


Proposal.rb

class Proposal < ActiveRecord::Base
  has_and_belongs_to_many :users
...


database migration for HABTM

class CreateProposalUserJoinTable < ActiveRecord::Migration
  def change

  create_table :proposals_users, :id => false do |t|
    t.integer :user_id
    t.integer :proposal_id
  end
  end
end


/views/proposals/_form.html.erb
...
<%= f.collection_select(:users, User.all, :id, :trading_name) %>

<%= f.collection_select(:users, User.all, :id, :trading_name) %>

<%= f.collection_select(:users, User.all, :id, :trading_name) %>

...

ここで、ユーザーに 3 人のユーザーを選択してもらい、関係に追加してもらいます。

このロジックをコントローラに追加しようとしましたが、正しく動作しません。

もともと、ID を外部キーとしてハックしていましたが、アクティブなレコードの関連付けを使用したいと考えています。

[編集]

proposals_controller.rb
 def create
    @proposal = Proposal.new(params[:proposal])

    if current_user
     @user = current_user

     @proposal.creator_id = @user.id
     @proposal.cost = 10


    end

    respond_to do |format|
      if @proposal.save


       (params[:proposal][:users]).each do |user|
          if user.to_i.to_s == user || user.to_f.to_s == user
            puts user 
            puts "********************\n\n\n\n\n\n\n"
            @proposal.users = User.find(user)

         User.find(user).proposals << @proposal
        end
        end
        @proposal.save
        format.html { redirect_to @proposal, notice: 'proposal was successfully created.' }
        format.json { render json: @proposal, status: :created, location: @proposal }
      else
        format.html { render action: "new" }
        format.json { render json: @proposal.errors, status: :unprocessable_entity }
      end
    end

  end
4

1 に答える 1

3

プロポーザルにユーザーを割り当てる必要はありません。代わりに、次のように ID を割り当てることもできます。

proposal.user_ids = params[:proposal][:user_ids]

次のコードでは、割り当ては自動的に行われます。

proposal.attributes = params[:proposal]

これを機能させるには、ビューを次のように変更する必要があります。

<%= select_tag("proposal[user_ids][]", options_from_collection_for_select(User.all, :id, :trading_name)) %>
于 2012-11-27T04:36:09.997 に答える