2016-05-29 1 views
1

この質問の枠組みは正確にはわかりません。ここに示したように、私は、どのようにcurrent_user.microposts.build作品のように混乱している:Hartlのレールチュートリアル - current_user.microposts.build

class MicropostsController < ApplicationController 
    before_action :logged_in_user, only: [:create, :destroy] 
    def create 
    @micropost = current_user.microposts.build(micropost_params) 
    if @micropost.save 
     flash[:success] = "Micropost created!" 
     redirect_to root_url 
    else 
     render 'static_pages/home' 
    end 
    end 
    ... 
end 

私はCURRENT_USERが以前のセッションヘルパーで定義されていたが、micropostsはどこから来るんので理解できますか?私はbelongs_toというユーザーにリンクされているマイクロポストモデルにアクセスしていると思いますが、モデル自体はMicropostと呼ばれています - どのようにレールはMicropost =マイクロポストを知っていますか?また、belongs_toを使用した場合、belongs_to userの代わりにbelongs_to :userを使用するのはなぜですか?

答えて

1

私は100%チュートリアルに精通しているわけではありませんが、あなたの質問すべてに答えることができると思います。

マイクロポストはどこから来たのですか? Userモデルに

、あなたはおそらく、このような行を持っている:あなたがそのような関連付けを定義するとき

has_many :microposts 

、あなたのUserクラスからインスタンス化された任意のオブジェクトのメソッドとして呼び出すことができます。

は、私たちはbelongs_toの持つユーザーにリンクされているマイクロポストモデルにアクセスしていると信じていますが、モデル自体がMicropostと呼ばれている - ので、どのようにレールがそのMicropost =マイクロポストを知っていますか?

慣習は、複数の名前を使用してhas_manyの関係を定義することであり、関連がレコードのコレクションを表すことを示します。

通常、Railsはを使用して、参照するモデルクラスおよびデータベーステーブルを決定するために、from singular to plural(およびvice versa)という単語を自動的に翻訳します。これはコンベンション/デフォルトですが、実際にはそうしたい場合はこれを上書きすることができますが、95%のケースでそれについて助言します。また

has_many :microposts, class_name: 'BlogPost' 

、我々はbelongs_toを使用するときに、なぜ我々はbelongs_to :user代わりのbelongs_to user行うのですか?あなたは、言っているので、

belongs_to userは、エラーの原因となる「belongs_toイニシャライザを呼び出し、最初の引数として変数userに格納された値を渡します。」あなたの例では、変数userが定義されていないと推測しています。

belongs_to :userは、ソートのような記号(つまり、belongs_to 'user')を渡しています。このシンボルでは、に、userという名前のアソシエーションを初期化するよう指示しています。そのシンボルに基づいて、以前の例で使用したclass_nameのようなオプションを指定しない限り、あなたが参照しているデータベーステーブル、モデルクラスなどを推測します。

0

レールはモデルMicropostとテーブルmicropostsを慣例:[model] + s = table(さらに複雑な複数化規則があります)を使用してリンクすることを知っています。この原則はCoC(Convention over Configuration)と呼ばれています。レールの哲学の大部分です。

Wikipedia entry

条約の構成(も慣例による符号化として知られている)フレームワークを使用して、開発者が行う必要がある意思決定の数を減少しようとしたソフトウェアフレームワークによって使用されるソフトウェアの設計パラダイムであるオーバー必ずしも柔軟性を失うことはありません。コンセプトは、Ruby on RailsのWebフレームワークの哲学を記述するためにデイビット・ハインメアー・ハンスソンによって導入されたが、「適切なデフォルト値」の概念とユーザインタフェース設計で驚き最小の原則のように、以前のアイデアに関連している

関連する問題