Я работаю над проектом, в котором требуется отношение 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) %>
...
Здесь я хочу, чтобы пользователь выбрал трех пользователей и добавил их в отношения.
Я попытался добавить эту логику в контроллер, но не могу заставить его работать правильно.
Первоначально я взломал его вместе с идентификаторами в качестве внешних ключей, но хотел бы использовать активные ассоциации записей.
[РЕДАКТИРОВАТЬ]
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