2011-09-15 11 views
0

私の見解では、私の記事を読んだ人の人数を知ることができます。それは次のように見えます。Rails 3 - associations

<%=article.hits.count%> 

わかりましたように、私は単純な関連付けを作成しました。 私のページにログインしているユーザーの情報を取得しようとしています。既にこの記事を読んでいる場合は、この情報を取得しようとしています。 hitsを含む私のテーブルでは、列user_idです。

<% if session[:login_user_id].hits.user_id == session[:login_user_id]%> 
    Have you read it already. 
<% end %> 

しかし、上記の例は、私には動作しません...誰も私を助けてもらえてください: しかし、私はまだ方法を見つけることができない、取得する方法...

は、私のような何かを試してみました、 実行する方法?

EDIT:モデル:事前に

class Article < ActiveRecord::Base 
    has_many :hits 
end 

class Hits < ActiveRecord::Base 
    belongs_to :article, :class_name => "DataHit", :foreign_key => "article_id" 
    has_many :users 
end 

class User < ActiveRecord::Base 
    belongs_to :hit 
end 

おかげであなたが受けたいモデルについて

+0

モデルに関係を付け加えてください、少なくとも問題と関係があるモデルを追加してください。私たちは 'Article'、' Hit'と 'User'のモデルを必要とします。または、user_idがモデルの 'Hit'に直接関係なく保存されていますか? – mliebelt

+0

元の投稿を更新しました。 – user1946705

答えて

1

ましょう最初の話。私のために、それは次のように聞こえます:

  • すべての記事は多くのユーザーが閲覧/閲覧できます。
  • すべてのユーザーは、多数の記事を読んだり訪問したりできます。
  • これは古典的なn:m -associationであり、通常has-many-throughアソシエーションによって実装されます。

これが意図している場合、それはのように実装する必要があります。もちろん

class Article < ActiveRecord::Base 
    has_many :hits 
    has_many :users, :through => :hits 
end 

class Hits < ActiveRecord::Base 
    belongs_to :article, :class_name => "DataHit", :foreign_key => "article_id" 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :hits 
    has_many :articles, :through => :hits 
end 

、あなたは最終的にDBモデルがそのようであることを確認移行を追加する必要があります。

  • ヒットにarticle_idとuser_idが含まれているため、ユーザーは読んだ記事を見つけることができます

odelを実装すると、より簡単になるはずです。次に、操作は@article.users.contains(User.find(user_id))のように利用できます。 Ruby on Rails Guidesのチュートリアルをご覧ください。このチュートリアルでは、多少の関係が何であるのか、どのような利点があるのか​​を説明しています。

Railsのコンソールで最初に試してみると役に立ちます。これを行うには、で始まる:

  1. スタートアプリケーションのルートディレクトリにレールコンソール:rails c
  2. は、idの記事を取得するには:例えばそこart = Article.find(1)を入力します。
  3. 利用可能なすべての方法を確認するには、art.methods.sortの方法を試してください。メソッドusersがない場合、あなたはアソシエーションに何か問題があります。
  4. us = art.usersを呼び出し、結果を確認してください。これは、レールの特定のオブジェクト、つまりコレクションのように動作し、そのコレクションにユーザーを追加および削除する方法(レールのライフサイクル全体を通して)を理解するオブジェクトでなければなりません。あなたの現在のエラーが異なることを意味する可能性があります。
    • あなたのデータベースモデルは、Railsで定義されている関連付けと一致しません。
    • Railsを妨げるマイナーな微調整(どこかのスペルミス)。

私はこれが次に何をすべきか、あなたにいくつかの手がかりを与える願って、私たちはかつてここで問題を解決し、すべての時間のためにできることはないと思います。

+0

ありがとうございます。あなたのメモを私のアプリケーションに適用しようとしましたが、未定義のメソッド 'contains for 'が#'というエラーになりました。私は 'contains'に関する情報を検索しようとしましたが、何も見つかりませんでした... – user1946705