1

モデルアーティストがいますが、現在ログに記録されているユーザーとアーティストへの参照を保存するモデルuser_artistを作成したいと思います。このデータベースには、1人のアーティストに対して複数のユーザーが後で存在する可能性があるため、新しいモデルを採用します。これでモデルができました。ユーザーが新しいアーティストを作成しているときに、現在のユーザーを保存するにはどうすればよいですか。

これが私の現在のフォームです:

<%= form_for @artist do |f| %>
  <%= f.label :name, "Name" %>
  <%= f.submit "Create" %>
<% end -%>

ユーザーをデータベースuser_artistに同時に保存するには、これをどのように変更する必要がありますか?

4

1 に答える 1

1

ログに記録された現在のユーザーを保存する場合は、コントローラーを編集できます。したがって、Artistを保存した後、UserArtistを保存できます。たとえば次のようになります。

def create
   @artist = Artist.new(params[:artist])
   if @artist.save
       @user_artist = UserArtist.new(:artist_id => @artist.id, :user_id => current_user.id)
       if @user_artist.save
          #code...
       else
          #errors...
       end
   else
       #errors...
   end
end

(これを行うには、これまで試したことのない簡単な方法があります。その方法で検索して表示しますが、誰かがそれを知っている場合は教えてください)

また、モデルではセッション変数にアクセスできないため、コールバックの作成については説明しませんでした(覚えているだけです)

将来的に、1つのフォームにユーザーアーティストを動的に追加したい場合は、http://railscasts.com/episodes/196-nested-model-form-part-1およびhttp://railscasts.com/をチェックしてください。エピソード/197-nested-model-form-part-2

アップデート

これは私が前にあなたに言った方法です(それは両方の記録を保存します):

@artist = Artist.new(params[:artist])
@artist.user_artists.new(:user_id => current_user.id)
if @artist.save
   #code
else
   #errors
end

また、この興味深いエントリを見つけました。親オブジェクトを正常に保存した場合にのみ、変更をhas_manyアソシエーションに保存しますか?

于 2012-12-09T18:33:06.870 に答える