我有一个应用程序,允许用户提交他们的个人资料评论(想想脸书墙)。
截至目前,用户只能从主页提交评论,这会创建新的“评论”,以及活动信息流的新“事件”。然后通过AJAX更新活动流。
但是,我希望用户也可以直接从他们的个人资料页面提交新评论。有没有办法让rails检测它所在的页面?主页(控制器:主页,操作:索引)或配置文件页面(控制器:用户,操作:显示)并采取相应的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
我可以使用rails来确定新评论帖的来源,并适当地提供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中使用隐藏字段标记,但两者都没有用。我宁愿不在评论模型中添加另一个元素来区分原产地。
但这些似乎都不起作用,所以我不知道该做什么。
谢谢!
答案 0 :(得分:1)
是否存在与其来源相关的不同行为?从上面的例子来看,似乎它在if和else块中完全相同。
话虽如此,没有理由你不能通过另一个变量来确定它来自哪里,例如params[:from]
然后在渲染你的部分时检查它。
答案 1 :(得分:1)
您应该能够使用
在控制器中确定请求的来源request.request_uri