0

我是 Rails 的新手,我一直在阅读 Michael Hartl 的教程,但我不确定我是否正确地做到了这一点。我有用户、帖子和类别:

用户可以创建帖子和类别

一个帖子只能分配给一个类别。

目前,当用户创建帖子时,他们输入类别(假设类别将始终存在于数据库中)并从那里查找类别的 ID 并将其传递给帖子创建。这就是我正在运行以创建帖子并将其分配给我的 Post_Controller 中的类别:

category_id = Category.find_by_name(post_params[:category])
@post = current_user.posts.build(title: post_params[:title], content: post_params[:content], category_id: category.id)

我的问题是:这是用两个belong_to 输入数据的正确方法吗?我已经挖掘了,我找不到一个简单的答案。对我来说,传递这样的类别 ID 似乎并不安全,但我不知道另一种方法可以做到这一点。这是我的基本模型信息(只是belong_to、has_many 等)。如果您需要更多,请告诉我:

class User < ActiveRecord::Base
    attr_accessible :username, :email, :password, :password_confirmation
    has_secure_password

    has_many :posts
    has_many :categories

class Post < ActiveRecord::Base
    attr_accessible  :title,  :content, :category_id
    belongs_to :user
    belongs_to :category

class Category < ActiveRecord::Base
    attr_accessible :name
    belongs_to :users
    has_many :posts
    validates :name, presence: true, uniqueness: true, length: {maximum:30}
    validates :user_id, presence: true
4

2 回答 2

1

这是用两个belong_to 输入数据的正确方法吗?

没关系。它有效吗?如果它有效,那很好。也许你可以做一些事情来收紧它,如果你发现你经常Category.find...打电话,但是,你也刚刚开始,所以不要太担心这样的事情。

对我来说,传递这样的类别 ID 似乎并不安全,但我不知道另一种方法可以做到这一点。

再说一次,现在不要担心太多。但是,如果您想了解 Rails 安全性,请查看.

于 2013-10-08T04:34:22.340 回答
0

如果创建新帖子所需的所有信息都在 中post_params,那么您似乎没有必要这样做Category.find_by_name。您应该收集category_id参数而不是类别名称。

然后在你的PostsController

@post = current_user.posts.build(post_params)

只要记住允许:category_id与您的其他常规属性一起使用post_params,您就会成为金色。

于 2013-10-08T04:37:51.687 回答