繁体   English   中英

Faye + Rails +在控制器中发送消息

[英]Faye + Rails + Sending message in controller

我的application_controller.rb

class ApplicationController < ActionController::Base
  def broadcast(channel, &block)
    message = {:channel => channel, :data => capture(&block)}
    uri = URI.parse("http://localhost:9292/faye")
    Net::HTTP.post_form(uri, :message => message.to_json)   
  end
end

posts_controller.rb ,我想这样做:

def create
  broadcast("/posts/new") do
    $('.user-win .posts').prepend('j(render('/posts/broadcast'))'));"
  end
end

但显然它会产生一个错误:

ArgumentError (wrong number of arguments (0 for 1))
 app/controllers/application_controller.rb:21:in `broadcast'

有任何想法吗?

您不能在控制器动作内编写JavaScript,而只能在成功创建帖子后呈现JavaScript模板,然后在create.js.erb文件内调用广播方法。

#posts_controller.rb

def create
  @post = Post.new(post_params)
  respond_to do |format|
    if @post.save
       format.js {render :status => :ok}
    else
       format.js {render :status => :unprocessable_entity}
    end
  end
end

现在,使用以下代码在app/controllers/posts/创建一个“ create.js.erb”文件

#create.js.erb
<% if @post.errors.any? %>
   # render error
<% else %>
   # broadcast the newly created post to "/posts/new" channel
   <% broadcast("/posts/new") do %>
     $('.user-win .posts').prepend('<%=j render @post %>');     
   <% end %>
<% end %>

现在在“ app / controllers / posts /”内部创建一个_post.html.erb文件,并编写要在视图中广播并呈现的html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM