2013-10-08 2 views
0

Я новичок в Rails, и я читал учебник Майкла Хартла, и я не уверен, правильно ли я это делаю. У меня есть пользователи, сообщения и категории:Более одного принадлежит_to

Пользователи могут создавать сообщения и категории

A Post может быть назначен только один категории.

В настоящее время, когда пользователь создает сообщение, которое они набирают в категории (просто скажем, что категория всегда будет существовать в базе данных), и оттуда она ищет идентификатор категории и передает ее вместе с созданием сообщения. Это то, что я бегу, чтобы создать пост и назначить его на категории в моем 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 годов? Я вырыл, и я не могу найти простой ответ на этот вопрос. Мне кажется, что передача идентификатора категории, подобного этому, небезопасна, но я не знаю другого способа сделать это. Вот моя основная информация о модели (просто принадлежность, 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 

ответ

1

Является ли это правильный способ для ввода данных с двумя belong_to годов?

Все в порядке. Это работает? Если это сработает, все в порядке. Возможно, есть вещи, которые вы могли бы сделать, чтобы затянуть их позже, если вы обнаружите, что вы делаете вызов Category.find... много, но вы тоже начинаете, так что не беспокойтесь о подобных вещах.

Мне кажется, что передача идентификатора категории, подобного этому, небезопасна, но я не знаю другого способа сделать это.

Опять же, не беспокойтесь об этом слишком много в данный момент. Однако, если вы хотите прочитать информацию о безопасности Rails, посмотрите на this.

+0

Awesome! Спасибо вам за помощь! – pnus

+0

, если это помогло, пожалуйста, проверьте ответ, чтобы он вырвался из очереди «без ответа» :). – dax

0

Если вам нужна вся информация, необходимая для создания нового сообщения, то в post_params, кажется, что вы делаете это Category.find_by_name без необходимости. Вы должны собирать category_id в своих параметрах, а не в названии категории.

И тогда в вашем PostsController:

@post = current_user.posts.build(post_params) 

Просто помните, чтобы :category_id вместе с другими регулярными атрибутами в вашем post_params и вы будете золотой.

+0

Я предполагаю, что 'category' в' post_params' на самом деле является строкой, поэтому 'find_by_name'. – j03w

+0

Конечно. Но так ли это? – depa

+0

Да, категория в post_params - это строка, и нет, это не обязательно. Я просто использовал строку в качестве примера, но это легко изменить в моем проекте. Спасибо за помощь! – pnus

Смежные вопросы