3

私はこれに過去3日間費やしましたが、どこにも答えが見つかりません。私は Rails を学ぼうとしていますが、かなり簡単に思えるアプリケーションから始めました。

私は2つのモデルを持っています:

class Album < ActiveRecord::Base

  has_and_belongs_to_many :users

  attr_accessible :title

end

class User < ActiveRecord::Base

  has_and_belongs_to_many :albums

  attr_accessible :first_name, :last_name

end

結合テーブルも作成しました

create_table "albums_users", :id => false
    t.integer "album_id"
    t.integer "user_id"

users/show.html.erb ファイルにフォームが含まれています

<%= form_for([@user, @user.albums.build]) do |f| %>

このフォームが送信されると、 my album#create コントローラーが呼び出されます

  def create
    @user = User.find(params[:user_id])
    @album = @user.albums.cre(params[:album])  
    @album.save
  end 

これにより、新しいアルバムが作成されますが、結合テーブルにエントリは作成されません。

フォームの送信時に送信されたパラメーター ハッシュを見ると、

Parameters: {"utf8"=>"✓", "commit"=>"Create Album", "user_id"=>"1", "authenticity_token"=>"XNCPLYWQRzjpuQfjqbR7XuhMjr5iRzjLiqXpqZ4spFo=", "album"=>{"event"=>"title"=>"My Title"}}

また、SQL リクエストはパラメーター ハッシュの user_id 値を使用しません。

SQL (3.4ms) INSERT INTO "albums" ("title", "user_id") VALUES (?, ?) [["title", "My Title"],["user_id", nil]]

user_id を使用してフォームに hidden_​​field を追加しようとしましたが、このエラーが発生します

Can't mass-assign protected attributes: user_id

私のモデルと私の関連付けのどこが悪いのか誰か説明してもらえますか? ありがとう!

4

2 に答える 2

4
  1. has_many 関連付けに複数形を使用する
  2. ユーザーのアルバム内でアルバムを直接作成する

    @album = @user.album.create(params[:album])
    
于 2012-10-03T08:02:45.863 に答える
0

user_id は params ハッシュのアルバム サブハッシュの一部ではないため、アルバムが保存されたときにユーザーが追加される可能性はありません。

簡単な解決策は次のとおりです。

def create
    @user = User.find(params[:user_id])
    @album = @user.album.build(params[:album])  
    @album.save
end 
于 2012-10-03T07:53:01.343 に答える