1

これに関連する多くの投稿を読みましたが、まだクリックしていません。外部キーの割り当てがどのように行われるかを理解できるように、できるだけ単純にしようとしている例があります。

2つのモデルがあるとします...

user.rb

Class User < ActiveRecord::Base
   has_many :microposts
end

micropost.rb

Class Micropost < ActiveRecord::Base
   belongs_to :user
end


microposts_controller の別の投稿でコードを見つけました...

def create
   @micropost = current_user.microposts.build(params[:micropost])
   if @micropost.save
     ...
   else
     ...
   end
end

質問

  • 「current_user」はレールメソッドですか?
  • モデルが Customer と呼ばれる場合、'current_customer' は機能しますか?
  • アプリケーションは、どのユーザーがマイクロポストを作成しているかをどのように認識しますか? (これはおそらく質問の言い方がばかげている)
4

2 に答える 2

0

current_user通常、Devise のような認証フレームワークによって提供されます。ログイン時に作成されたセッションを見て、そのユーザーを特定できます。はい、少なくともDeviseでCustomerというモデルが作成されていれば、 current_customer は「顧客」がログインした後に機能します。

于 2013-03-28T03:54:00.297 に答える
0

回答

  1. いいえcurrent_user、Rails メソッドではありません。これは一部の認証フレームワークによって提供され、ほとんどのアプリcurrent_userは、通常セッションまたはインスタンス変数に設定されている現在のユーザーを返すヘルパー メソッドを実装しています。

  2. いいえ、メソッドはモデルによって定義されていないためです。current_customerうまくいきません。別の名前のモデルを指定して動的メソッドを実行する方法がいくつかあります。たとえばCustomer、目的の出力を提供する method_missing を記述できますが、それを使用するためにはおそらくより多くの作業が必要になります。

  3. 質問 1 に戻ります。このメソッドは、現在サインインしているユーザーcurrent_userのインスタンスを返しUser、結果は次のようになります。@current_user.microposts.build

current_user のコードは通常、次のようになります。

def current_user
  @current_user ||= User.find_by_remember_token(cookies[:remember_token])
end

remember_tokenこれは、以前に Cookie に保存された を持つ User を見つける@current_userか、既に設定されている場合は を使用することを意味します。

お役に立てれば!

于 2013-03-28T04:07:51.360 に答える