1

ユーザーがプロジェクトを作成し、プロジェクトに投稿を追加できる Rails 4 アプリを作成しています。投稿は、テキストとオプションのキャプション付きの画像で構成されるため、画像とそのキャプションを格納する写真モデルがあります。

ユーザーには多くのプロジェクトがあり、プロジェクトには多くの投稿があり、投稿には多くの写真があります

私のルートは次のようになります。

resources :projects do
  resources :posts
end
resources :posts do
  resources :photos
end

投稿は user_id が保存されているプロジェクトに直接関連しているため、 current_user による承認はプロジェクトと投稿に対して機能します。写真は投稿に直接リンクするだけなので、投稿コントローラーで行うようにこれを行うことはできません。

def set_project
  @project = current_user.projects.find(params[:project_id])
end

プロジェクトの作成者のみが投稿に写真を追加、編集、削除できるように、写真に current_user を同様の方法で使用する方法はありますか?

現在、写真コントローラーで、次の方法で関連する投稿を取得します。

def set_post
  @post = Post.find(params[:post_id])
end

しかし、それには明らかに current_user 権限がありません。投稿が属するプロジェクトの ID を見つけてから、写真コントローラー内で current_user を使用する方法が必要です。

4

1 に答える 1

0

経験則では、ネストされたリソースのレベルが 2 つを超えないようにしてください。そうしないと、忙しすぎてそれらを処理できなくなります (おそらく私の経験から、ソースは忘れてください) 。

あなたの場合、写真にネストされたリソースを設定しないことをお勧めします(または、ユーザーの下にネストされたリソースを設定します)

resources project do
  resources posts
end

resources photo

次にモデル化

class User < ActiveRecord::Base
  has_many :photos
  has_many :projects
end

これは、現実の世界でも理にかなっています。投稿はプロジェクトの下にあり、それは合理的です。しかし、写真はどうですか?一度の投稿でレイアウトのアイデアを示す写真がある場合、今後の投稿でこの写真を再度使用できますか? クライアントが前後を比較したいとしますか? 間違いなくすべきです。したがって、合理的な論理では、写真は投稿から独立しているほうがよいでしょう。

そして、あなたの質問はすべて質問ではありません。

追加: コメントで質問に答えるに は、私の意見では、投稿を写真に関連付ける (関連付けない) 方法は 3 つあります。

  1. 投稿コンテンツに写真 ID を挿入します。これが最も推奨されます。これにより、投稿者は写真の位置を制御できます。関連付けは必要ありません。

  2. 多対多の関係。少し複雑です。

  3. 投稿でシリアル化された列を使用して、言及された写真 ID の配列を保存します。

もう 1 つの方法は、has_many の写真を投稿する方法です。この場合、写真には FIXED post_id があり、他の投稿で呼び出すことはできません。結果が受け入れられる場合は、それを行うことができます。ただし、この方法でも、ネストされたリソースも必要ありません。

于 2013-08-25T14:00:11.010 に答える