5

レールでの関係を機能させるのに苦労しています。

ユーザー、ギャラリー、コメントモデルがあります

class Gallery  
  has_many :comments
  belongs_to :user
end

class User  
  has_many :comments
  has_many :galleries
end

class Comment
  belongs_to :gallery
  belongs_to :user
end

これをすべてリンクするには、ルート、コントローラー、およびビューで何をすべきですか? 私を助けてください ?答えを見つけるのはかなり混乱します。可能であれば、railscast のようにネストしたくありませんが、モデルごとに必要です。たとえば、ギャラリーでユーザーを入力できます。たとえば、コメントで、ギャラリー ID とユーザー ID を見つけて入力できます。

私は今、何をすべきか分からず、完全に忘却の中にいます。助けてください。ありがとう。

4

1 に答える 1

8

単純にやり方を教えられない複雑なテーマですが、私が少しお手伝いします。Zippie の提案は良いものです。チュートリアルを実行して、さまざまな種類の関係について学習する必要があります。

データベースには、次のものが必要です。

create_table :gallery do |t|
  t.user_id
end

create_table :comments do |t|
  t.gallery_id
  t.user_id
end

これらは、Rails がモデルを照合するために使用する外部インデックスです (外部インデックスは、belongs_to 関係を指定するモデルに入ります)。

ルートに関しては、単一の解決策はありませんが、/users/comments や /galleries/comments などを実行できるように、ルートをネストすることができます。

resource :users do
   resource :comments
end

resource :galleries do
   resource :comments
end

単純に別々に持つこともできます:

resources :users, :galleries, :comments

コントローラーで新しいオブジェクトを作成するときは、それが属するオブジェクトから行う必要があります。

@comment = current_user.comments.build(params[:comment])

これにより、たとえば、コメントの user_id が現在のユーザーに設定されます。

ビューでは、大きな違いはありません。次のようにコントローラーで @comments 変数を取得するだけです。

@comments = @gallery.comments

あなたの見解でそれを使用してください。

フォーム ヘルパーを定義して新しいコメントを作成する場合は、直感的ではない可能性があります。次に例を示します。

<%= form_for([@gallery, @comment]) do |f| %>
  ...
<% end %>

始めるのに役立つことを願っています。

于 2013-04-10T23:38:39.133 に答える