从rails中的不同页面提交消息

时间:2010-11-08 00:10:38

标签: ruby-on-rails ajax rjs

我有一个应用程序,允许用户提交他们的个人资料评论(想想脸书墙)。

截至目前,用户只能从主页提交评论,这会创建新的“评论”,以及活动信息流的新“事件”。然后通过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中使用隐藏字段标记,但两者都没有用。我宁愿不在评论模型中添加另一个元素来区分原产地。

但这些似乎都不起作用,所以我不知道该做什么。

谢谢!

2 个答案:

答案 0 :(得分:1)

是否存在与其来源相关的不同行为?从上面的例子来看,似乎它在if和else块中完全相同。

话虽如此,没有理由你不能通过另一个变量来确定它来自哪里,例如params[:from]然后在渲染你的部分时检查它。

答案 1 :(得分:1)

您应该能够使用

在控制器中确定请求的来源
request.request_uri