1

我仍在熟悉 Rails,并且对我尝试使用 Rails 3.2 解决的问题有疑问。这是我认为我的问题所在的几个文件的链接:

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

如果代码真的很糟糕/添加了一些不需要存在的东西,我深表歉意,因为我仍在努力适应一切的工作方式。

我想对我网站上的每篇文章发表评论——我的逻辑是用户有很多评论,我想这些帖子有很多来自用户的评论。我确实添加了这种关系(尽管它似乎没有做任何特别的事情),而且我觉得我所有的表引用都是正确的(尽管我没有向用户添加任何东西,因为我正在使用设计和感觉我不需要添加任何东西,因为帖子本身就是一个单独的对象)。

截至目前,我可以显示所有评论,因为我可以创建和保存它们。我至少还保存了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 方法的评论实例,因为它可以在帖子下方使用)会导致质量分配错误。弄乱:classand:foreign_key选项也没有多大作用。根据我所做的研究,其中包括 Rails 自己的一些文档,我认为我不需要has_many直通关系,但我不知道我在哪里缺少相应保存信息所需的内容。

也许这部分是由于我对数据库/模型关系设计缺乏了解,尽管感谢任何帮助。我见过几个类似的问题,但我仍然发现很难将他们的解决方案应用到我自己的特定问题的上下文中。

4

1 回答 1

1

根据您的帖子,听起来您可能在创建表后将 post_id 添加到迁移中。如果这是真的,请理解修改迁移文件是不好的做法。相反,您应该创建一个新的迁移来“修复”数据库的状态。

看起来您的关系已正确设置为帖子和评论。带有“belongs_to”的模型将具有外键;因此,我希望评论有“post_id”。

请查看以下内容是否适合您:

  1. 将“post_id”添加到您已经运行的评论迁移文件中。
  2. 创建一个新的迁移: rails g migration addPostIdToComments
  3. 在生成的迁移中,在“更改”方法中输入:add_column :comments, :post_id, :integer
  4. 运行你的迁移:“rake db:migrate”

这应该将 post_id 列添加到您的评论表中。

如果您陷入困境并想要完全破坏您的数据库并从头开始重新创建它(它看起来像一个示例应用程序),(请注意这将完全删除数据库)您可以运行:rake db:drop db:create db:migrate

批量分配问题可能与 rails 中的新安全选项有关,该选项需要将所有可以在数据库中更新的模型属性(列)列入白名单。请参阅 attr_accessible 文档以了解白名单属性:http ://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

欢迎来到轨道!希望这可以帮助!

于 2012-11-04T00:43:35.773 回答