不止一个人属于

时间:2013-10-08 04:22:19

标签: ruby-on-rails

我是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)

我的问题是:这是用两个belongs_to输入数据的正确方法吗?我挖了一下,我找不到一个简单的答案。对我而言,传递这样的类别ID似乎并不安全,但我不知道另一种方法。这是我的基本模型信息(只有belongs_to's,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

2 个答案:

答案 0 :(得分:1)

  

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

没关系。它有用吗?如果它有效,那很好。也许有些事情你可以做些以后收紧,如果你发现你正在进行Category.find...电话,但是,你也刚刚开始,所以不要担心这样的事情太多。

  

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

同样,此刻不要太担心。但是,如果您想阅读Rails安全性,请查看this

答案 1 :(得分:0)

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

然后在PostsController

@post = current_user.posts.build(post_params)

请记住允许:category_id以及post_params中的其他常规属性,您将成为金色。