2011-10-20 20 views
0

にはいくつかアドバイスが必要です。 私はRoRに関するプロジェクトをやっていますが、モデル間の関係をどうすればいいのか分かりません。私は3つのモデル - ユーザー、ボード、メッセージを持っています。 初めは非常に単純です: ユーザーは一つの壁があり、それがユーザーに属しているので、私はこれがあるべき推測:Ruby on Railsモデルの関係

class User < ActiveRecord::Base 
    has_one :board 
end 

class Board < ActiveRecord::Base 
    belongs_to :user 
end 

最後のモデルはメッセージであり、ここで私の問題が来ます。メッセージはユーザーに帰属しますが、彼はそれを書いていますが、それは壁にも属します。壁に書いています(また、他のユーザーに属するWallでもかまいません)。

私は簡単な解決策を使用:

class Theme < ActiveRecord::Base 
    belongs_to :board 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
     has_one :board 
     has_many :themes 
end 

class Board < ActiveRecord::Base 
     belongs_to :user 
     has_many :themes 
end 

をしかし、私はそれに満足し、それが完璧ではないことを感じていません。私はそれが誰より経験豊富な人のためのハードな作業ではありません願っています(今はuser_idのフィールドを埋めていない)

user.themes.create(:board => @board) 

を:私は私の書き込みは以下のように考えてみましょうするソリューションを探していますRuby on Railsモデルで私よりも。良いアドバイス、感謝します。

答えて

0

通常の場合、あなたはdeviseのような認証宝石を使用します。次に、現在アクションを呼び出しているユーザーのオブジェクトを含むcurrent_user変数があります。

ユーザーがトピックを作成するときにユーザーを設定するには、コントローラに1つの単純な行を追加します。

@theme.user = current_user 

またcenralファイルに承認を管理するために、カンカンのような宝石を使用する必要があります。 Youlがここrailscast見つける:

http://railscasts.com/episodes/192-authorization-with-cancan

+0

を私はこの宝石を使用することは良い方法であることを理解し、私はすでに、私はマイケル・ハートルのRailsのチュートリアルにルビーから取ったシンプルなユーザーモデルを持っています。私はあなたが示唆していることをすることができますが、私はあなたの行が不要な解決策を探しています。単純な多対1の関係のように。助けてくれてありがとう – leonprou

+0

この問題を処理する行を追加する必要があります。安全な選択肢はありません!あなたはuser_idを提供する隠されたフィールドを広告することができますが、POSTとGETを通じて提供されるすべてのデータを操作できるので、euserを介してクライアントに制御を渡します! – davidb

+0

実際、予期せぬことに、私のソリューションは私が望むように機能しました。あなたのアドバイスをありがとう、私は将来それらを実装するでしょう。 – leonprou

関連する問題