Проблемы с ассоциацией

У меня есть три модели User, Blog и Comment.

Пользователь.rb

class User < ActiveRecord::Base
  attr_accessible blah blah      
  has_many :blogs
  has_many :comments
end

Блог.рб

class Blog < ActiveRecord::Base
    attr_accessible :user_id, :title, :content
    belongs_to :user
    has_many :comments
end

Комментарий.рб

class Comment < ActiveRecord::Base
    attr_accessible :user_id, :blog_id, :comment
    belongs_to :blog
    belongs_to :user
end

При создании действия контроллера комментариев

def create
    @blog = Blog.where('id=?', params[:blog_id])
    @comment = @blog.comments.new(params[:comment])
    @comment.save
end  

Вот как я передам идентификатор текущего_пользователя в поле :user_id таблицы комментариев, я могу сделать для этого скрытое поле, но это небезопасно. Пожалуйста помоги! Заранее спасибо.


person Rajdeep Singh    schedule 11.09.2013    source источник


Ответы (1)


Будет ли это делать то, что вы хотите?

def create
  @blog = Blog.where('id=?', params[:blog_id])
  @comment = @blog.comments.new(params[:comment])
  @comment.user = current_user # force the user to be the logged-in user
  @comment.save
end 
person Taryn East    schedule 11.09.2013
comment
Здесь мы явно передаем информацию о пользователе, есть ли другой способ реализовать это? - person Rajdeep Singh; 11.09.2013
comment
Вы не передаете никакой информации о пользователе. Вы выводите пользователя из сеанса. user_id никогда не появляется в формах или параметрах. Просто получите его прямо из сеанса и поместите его прямо в объект комментария из сеанса, как указано выше. - person Taryn East; 11.09.2013
comment
Да, это нормально, но не могли бы вы предложить другой способ сделать это, например, прямо из формы? :) - person Rajdeep Singh; 11.09.2013
comment
Кто-то говорил о вложенных формах, но я понятия не имею, как их использовать. - person Rajdeep Singh; 11.09.2013
comment
Конечно, вы можете поместить user_id в форму, и есть куча способов сделать это, но в тот момент, когда вы помещаете информацию о пользователе в форму, это означает, что у вас есть информация о пользователе, видимая человеку, вошедшему в систему. Разве это не то, что вы пытаетесь избежать? - person Taryn East; 12.09.2013