Есть несколько разных способов, я думаю, вы могли бы это сделать, вот один из возможных. Скажем, ваша форма комментария выглядела примерно так (множество предположений приведено ниже, но должно быть не так уж плохо, чтобы изменить это в соответствии с вашими потребностями):
= simple_form_for :comment do |f|
= f.input :comment_body # Not sure what your comment model looks like here, just a guess
- unless current_user.present? # Don't show the GuestUser fields unless no current_user, will also validate this on the backend
= f.input :first_name
= f.input :last_name
= f.input :email
# ...
В вашем контроллере вы можете что-то сделать например:
def create
user = current_user || GuestUser.create(guest_params) # Take the current logged in user, or generate a new GuestUser
redirect_to(#bad_user_path, notice: 'User invalid') unless user.valid? # Mostly a check on GuestUser here
@comment = user.comments.new(comment_params)
if @comment.save!
redirect_to (#wherever), notice: 'Saved comment!'
else
redirect_to (#wherever), notice: 'Comment invalid'
end
end
private
def comment_params
params.require(:comment).permit(:comment_body)
end
def guest_params
params.require(:comment).permit(:first_name, :last_name, :email)
end
end
Опять же, здесь будет несколько предположений, например, что ваша модель Comment
содержит некоторые attr_accessor
s для :first_name, :last_name, :email
, просто чтобы вы могли использовать f.input
в простом форма vs f.text_field
, но это будет один путь.