Rails コンソールで User.first と Post.first を実行すると正常に動作します。Post.first.user は正常に動作しますが、User.first.posts で Undefined method エラーが発生します
モデル:
class User < ActiveRecord::Base
attr_accessible :role :user_email, :user_name
has_many :posts
end
と
class Post < ActiveRecord::Base
attr_accessible :content, :status, :title, :user_id
belongs_to :user
has_many :comments
end
新しいプロジェクトを作成するとすべてうまくいきますが、この場合は別のことをしました。既存のデータベース (sqlite) を別の Web アプリケーション (非レール) からレールに適合させました。私がしたことは、レールの規則に合わせて列の名前を変更することでした。以前はユーザー名を一意のキーとして使用し、それを使用して投稿所有者にリンクしていましたが、列名を user_id に変更し、すべての値を関連するユーザー ID に更新しました。列の型と値も int 値に変更しました。
コメントにも同じことが言えます: Comment.first.post は機能しますが、Post.commments は未定義のメソッド エラーを返します。
User.joins(:post(s)) を実行すると、「'posts' という名前の関連付けが見つかりませんでした」というエラーが表示されますが、Post.joins(:user) は正常に動作します。
編集: 残念ながら、関連性がないと思われる関連情報を省略しました。
とにかく-ロールという列があったため、ユーザーモデルにはattr_accessible :roleがありました---一度>すべてが意図したとおりに機能することを削除しました。
しかし、なぜこれが違いを生む必要があるのか わかりません。これ: > https://github.com/ryanb/cancan/wiki/Role-Based-Authorizationユーザー モデルには :role があり、 > ユーザー ベースのアプリには has_many 依存関係があると想定し、私のように失敗します。
...または、私が見逃しているものは他にありますか?