ユーザーと製品の 2 つの別個の DB テーブルを持つレール アプリがあります。ユーザーは_多くの製品を持ち、製品は_ユーザーに属します。
製品を作成するときに、製品テーブルの user_id データベース列に user_id を自動的に追加したいと考えています。新しい製品が作成されたときに正しい user_id が追加されるようにするには、mvc にどのような変更を加える必要がありますか?
ユーザーと製品の 2 つの別個の DB テーブルを持つレール アプリがあります。ユーザーは_多くの製品を持ち、製品は_ユーザーに属します。
製品を作成するときに、製品テーブルの user_id データベース列に user_id を自動的に追加したいと考えています。新しい製品が作成されたときに正しい user_id が追加されるようにするには、mvc にどのような変更を加える必要がありますか?
ユーザーを通じて、新しい製品の作成のスコープを設定できます。
たとえば、これの代わりに:
Product.create(params[:product])
これをして:
current_user.products.create(params[:product])
ここで、「current_user」は製品を作成しているユーザーです。
提案として、以前の質問のいくつかに戻って回答を受け入れることをお勧めします。これにより、回答率が向上し、将来誰かがあなたの質問に回答する可能性が高くなります.
これを行うにはいくつかの方法がありますが、1 つの方法は次のとおりです。
現在のユーザー関数を作成
class ApplicationController < ActionController::Base
private
# Finds the User with the ID stored in the session with the key
# :current_user_id This is a common way to handle user login in
# a Rails application; logging in sets the session value and
# logging out removes it.
def current_user
@_current_user ||= session[:current_user_id] &&
User.find_by_id(session[:current_user_id])
end
end
http://guides.rubyonrails.org/action_controller_overview.html#session
セキュリティ上の懸念を認識していることを確認してください。Devise のような gem も役に立ちます。
製品コントローラに追加
class ProductsController < ApplicationController
def create
current_user.products.create! params[:product] # make sure attr_accessible is setup on products
end
end