У меня есть приложение, которое позволяет пользователям оставлять комментарии в своих профилях (например, на стене Facebook).
На данный момент пользователи могут отправлять комментарии только с домашней страницы, которая создает новый «комментарий», а также новое «событие» для потока действий. Затем поток активности обновляется через AJAX.
Однако я хочу, чтобы пользователи также могли отправлять новый комментарий прямо со страницы своего профиля. Есть ли способ заставить рельсы определять, на какой странице они находятся? Домашнюю страницу (которая является контроллером: home, action: index) или страницу профиля (controller: пользователь, action: show) и в зависимости от выполнения соответствующих действий ajax? Вот мой код:
для формы комментария:
<% form_remote_for Comment.new do |f| %>
<%= f.text_area :message, :value => "create a new comment...", :onfocus => "this.value=''" %>
<%= f.submit "post comment", :disable_with => 'posting', :class => 'button' %>
<% end %>
и мой контроллер комментариев:
def create
comment = current_user.comment.create(params[:comment])
comment.save!
event = comment.user.events.create
event.kind = "comment"
event.data = { "message" => "#{comment.message}" }
event.save!
@user_stream = current_user.stream.paginate :page => params[:page], :order => "created_at desc"
render :update do |page|
page.insert_html :top, "stream", :partial => "home/new_comment_event", :locals => { :comment => comment }
page["comment_message"].clear
end
end
Я хочу, чтобы публикация комментариев со страницы профиля была идентичной, за исключением того, что ajax будет:
render :update do |page|
page.insert_html :top, "profile", :partial => "home/new_comment", :locals => { :comment => comment }
page["comment_message"].clear
end
Могу ли я использовать рельсы, чтобы определить, откуда поступает этот новый комментарий, и правильно обслуживать ajax?
Я думаю что-то вроде:
render :update do |page|
if page['stream']
page.insert_html :top, "stream", :partial => "home/new_comment_event", :locals => { :comment => comment }
page["comment_message"].clear
else
page.insert_html :top, "stream", :partial => "home/new_comment_event", :locals => { :comment => comment }
page["comment_message"].clear
end
end
или
render :update do |page|
if page.select('ul#stream').any?
page.insert_html :top, "stream", :partial => "home/new_comment_event", :locals => { :comment => comment }
page["comment_message"].clear
else
page.insert_html :top, "comment_list", :partial => "home/new_comment", :locals => { :comment => comment }
page["comment_message"].clear
end
end
Я также пытался использовать скрытый тег поля только в комментариях к профилю, в форме и в request.request_uri, но ни один из них не сработал. Я бы не стал добавлять другой элемент в модель комментариев, чтобы различать место происхождения.
Но ни один из них, похоже, не работает, поэтому я не знаю, что делать.
Спасибо!