Изменить: Оказывается, это действительно проблема синтаксиса при использовании render
для частичных файлов. Должно быть render partial:
Я следую этому руководству по публикации в блоге, чтобы реализовать гем actions_as_commentable_with_threading. http://twocentstudios.com/blog/2012/11/15/simple-ajax-comments-with-rails/
У меня есть character
модель со следующей частичной формой комментариев в show.html.haml
представлении.
Эта строка дает мне неопределенную локальную переменную или метод для 'комментария'
app / views / characters / show.html.haml
...
= render 'comments/form', :locals => { comment => @new_comment }
...
Мне показалось, что хеш внутри хеша locals не подходит, поэтому я изменил локальную переменную comment
на :comment
. Это сработало нормально, но я не верю, что я должен это делать.
Когда я это делаю, визуализируемый фрагмент формы также использует локальную переменную comment
.
app / views / comments / _form.html.haml
.comment-form
= simple_form_for comment, :url => comment_path, :remote => true do |f|
= f.error_notification
= f.input :body, :input_html => { :rows => "3" }, :label => false
= f.input :commentable_type, :as => :hidden, :value => comment.commentable_type
= f.input :commentable_id, :as => :hidden, :value => comment.commentable_id
= f.error :base
= f.button :submit, :class => "btn btn-primary", :disable_with => "Submitting…"
Обратите внимание, что объект, переданный в метод simple_form_for
, также является локальной переменной. Это тоже вызвало ошибку, и я тоже превратил ее в символ. Затем comment.commentable_type
вызывал ошибку, естественно, потому что comment
не был определен. Я не могу превратить это в хеш, потому что для него есть вызов метода, верно?
Каким бы ни был ответ на вопрос, похоже, что я поступаю неправильно. Я не должен превращать вещи в символы, когда проблема в том, что это не определено. Где я должен это определить? Где и как это определить? Я пробовал просто сделать comment
в контроллере комментариев,
Я использую rails 4.0.0, используя простую форму, и haml. Может быть, это плохой синтаксис для простой формы?
РЕДАКТИРОВАТЬ: это была вторая строка, отображающая часть комментария, которая вызывала ошибку. (все, что было названо комментарием, затрудняло определение его происхождения.
= render 'comments/form', comment: @new_comment
= render 'comments/a_comment', collection: @comments, as: :comment
-# partial for a single comment.
%div.comment{ :id => "comment-#{comment.id}" }
%hr
= link_to "×", comment_path(comment), :method => :delete, :remote => true, :confirm => "Are you sure you want to remove this comment?", :disable_with => "×", :class => 'close'
%h4
= comment.user.username
%small= comment.updated_at
%p= comment.body
%h4
= render 'comments/form', :locals => { :comment => @new_comment }
- person cristian   schedule 03.06.2014simple_form_for comment
. Если я сделаюsimple_form_for :comment
, тоcomment.commentable_type
не будет работать. превращение этого в символику тоже не сработает. - person ahnbizcad   schedule 03.06.2014:locals => { :comment => @new_comment }
определенно является правильным синтаксисом, но был ли@new_comment
определен? Если нет, то в форме локальная переменнаяcomment
будет установлена вnil
. - person Max Williams   schedule 03.06.2014comment
распознается в частичной форме? Включает ли использование совпадающего имени символа соответствующую локальную переменную? - person ahnbizcad   schedule 03.06.2014@new_comment
не устанавливается. В контроллере charcters - ›show action строка@new_comment = Comment.build_from(@character, current_user, "")
, как сказано в руководстве github readme, и в руководстве, которое я связал в OP, но, по-видимому, он не работает. (current_user взят из devise gem) github.com/elight/acts_as_commentable_with_threading - person ahnbizcad   schedule 03.06.2014render @comments
и посмотреть, какой части он ожидает - person Pierre-Louis Gottfrois   schedule 03.06.2014