1

私はまだRailsに精通しており、Rails3.2を使用して解決しようとしている問題に関して質問があります。これが私の問題があると思う問題のいくつかのファイルへのリンクです:

https://gist.github.com/0fe5cf9093b21f4f632f

コードが本当に悪い場合はお詫びします/私はまだすべてがどのように機能するかに慣れようとしているので、存在する必要のないいくつかのものを追加します。

私のウェブサイトで行われた投稿ごとにコメントを付けたいのですが、私が持っている論理は、ユーザーには多くのコメントがあるということです。投稿にはユーザーを通じて多くのコメントがあると思います。私はその関係を追加しました(特に何もしていないようですが)、すべてのテーブル参照が正しいように感じます(ただし、deviseとを使用しているため、ユーザーには何も追加していません)投稿自体は別のオブジェクトであるため、何かを追加する必要があるとは感じませんでした)。

今のところ、コメントを作成して保存できるように、一般的にすべてのコメントを表示できます。また、少なくともuser_id変数を保存していたので、どのアカウントがコメントを作成しているかを理解できます。どこでいつ渡すのかよくわからないpost_idので、それが最大の問題です。とにかくposts_controller(理論的には投稿ページがロードされたときにその属性を編集できるはずなので)でそれをやろうとすると、

undefined method 'post_id'

また

no post_id column

エラー、私が理解している限り、私はそれを定義しましたが、それが存在しないことを示します。user_id前述のように、を保存できるという事実は、私をさらに混乱させます。

ショービューで作成されたコメントに属性を表示すると、次のようになります。

{
    "id"=>1,
    "content"=>"text here",
    "posted"=>Sat, 03 Nov 2012 20:36:53 UTC +00:00,
    "user_id"=>1,
    "created_at"=>Sat, 03 Nov 2012 20:36:53 UTC +00:00,
    "updated_at"=>Sat, 03 Nov >2012 20:36:53 UTC +00:00
}

post_idコメントのために移行テーブルに追加しましたが、ありません。@post.id投稿コントローラーで(投稿の下にあるshowメソッドのコメントのインスタンスに)渡そうとすると、一括割り当てエラーが発生します。:classとオプションをいじり回して:foreign_keyも、あまり効果がありません。Rails自身のドキュメントの一部を含む私が行った調査に基づくと、私は完全なhas_many関係が必要だとは思いませんが、それに応じて情報を保存するために必要なものがどこにないのかわかりません。

おそらくこれは、データベースとモデルの関係の設計についての私の理解が不足していることが一因ですが、助けていただければ幸いです。私はいくつかの同様の質問を見てきましたが、それでも私自身の特定の問題の文脈にそれらの解決策を適用することは難しいと思います。

4

1 に答える 1

1

投稿に基づくと、テーブルを作成した後、移行にpost_idを追加した可能性があります。これが当てはまる場合は、移行ファイルを変更することは悪い習慣であることを理解してください。代わりに、データベースのステータスを「修正」する新しい移行を作成する必要があります。

投稿やコメントに対して、関係が正しく設定されているようです。「belongs_to」を持つモデルには外部キーがあります。そのため、コメントには「post_id」が含まれていると思います。

以下があなたのために働くかどうか見てください:

  1. すでに実行されているコメント移行ファイルに追加された「post_id」を削除します。
  2. 新しい移行を作成します。 rails g migration addPostIdToComments
  3. 生成された移行で、「change」メソッドにこれを入力します。add_column :comments, :post_id, :integer
  4. 移行を実行します:「rakedb:migrate」

これにより、post_id列がコメントテーブルに追加されます。

バインドを取得し、データベースを完全に破棄して最初から再作成する場合(サンプルアプリケーションのように見えます)(これによりデータベースが完全に削除されることに注意してください)、次のコマンドを実行できます。rake db:drop db:create db:migrate

一括割り当ての問題は、データベースで更新できるすべてのモデル属性(列)をホワイトリストに登録する必要があるレールの新しいセキュリティオプションに関連している可能性があります。ホワイトリストの属性については、attr_accessibleのドキュメントを参照してください:http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

Railsへようこそ!お役に立てれば!

于 2012-11-04T00:43:35.773 に答える