Rails - Написать комментарий как гость с devise. Дизайнерское предложение? - PullRequest
1 голос
/ 14 октября 2011

Я хочу иметь возможность написать комментарий как гость или как зарегистрированный пользователь devise.

Моя модель комментариев содержит : заголовок , : содержимое , : идентификатор_пользователя , : guest_email , : guest_website и : write_as_guest в качестве логического значения.

Я хотел проверить наличие : guest_email только тогда, когда ни один пользователь не подписан. Но я думаю, что я не иду в правильном направлении.

Я управляю формой с помощью AJAX / jQuery, и я хотел иметь гостевую форму, где: content и: guest_email - обязательные поля. С другой стороны, я хочу иметь пользовательскую форму, в которой необходим только контент:

Вот как я пытался это сделать.

class Comment < ActiveRecord::Base
  before_validation :set_write_as_guest

  belongs_to :user

  validates_presence_of :content
  validates_presence_of :guest_email, :if => :write_as_guest?

  private

  def write_as_guest?
    self.write_as_guest
  end

  def set_write_as_guest
    if user_signed_in?
      self.write_as_guest = false
    else
      self.write_as_guest = true
    end
  end

end

Кажется, что user_signed_in? метод нуждается в before_filter: authenticate_user! тогда у меня есть следующее в моем comments_controller

before_filter :authenticate_user!, :only => :create

Но, тем не менее, я не хочу проходить аутентификацию, потому что это гость ...

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

Thx

1 Ответ

0 голосов
/ 14 декабря 2015

Вы можете сделать пользовательскую проверку, как это

class Comment < ActiveRecord::Base
  validate :guest_commentator

    def guest_commentator
      user = User.find(user_id)
      self.errors.add(:user_id => "some error message here ") unless user.nil? 
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...