我是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
答案 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
中的其他常规属性,您将成为金色。