Rails: Как в Partial передать переменную класса?

Друзья, подскажите как решить такую ситуацию.

я определяю переменную экземпляра

class QuestionsController < ApplicationController
  def show
    @comment_answer = @answer.comments.new
  end
end

Позже ее использую в partial

= form_with model: [answer, @comment_answer], class: ‘new-comment’ do |f|
    p
    = f.label :body, ‘Comment’
    p
    = f.text_area :body
    p
    = f.submit ‘add comment’

И позже при создании answer я вызываю render этого partial из другого Controllerа

class AnswersController < ApplicationController
  def publish_answer
    AnswersChannel.broadcast_to(@question,
      ApplicationController.render(
        partial: ‘answers/answer’,
        locals: { question: @question, answer: @answer, current_user: current_user }
      ))
  end

Выходит ошибка, потому что Partial не откуда брать @comment_answer

Вопрос: как мне в контроллере AnswersController передать в partial переменную экземпляра, чтобы в partial она была доступна как переменная экземпляра, а не как локальная??


Ответы (1 шт):

Автор решения: Василиса

Использовать @-переменные в партиалах - плохая идея, и ваш вопрос в очередной раз это доказывает. Самое простое решение в вашем случае:

form_with model: [answer, answer.comments.new], class: ‘new-comment’ do |f|

И убрать @comment_answer = @answer.comments.new из QuestionsController, само собой

→ Ссылка