2014-06-17 60 views
0
發送消息

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' 

有什麼建議嗎?

回答

2

您無法在控制器中編寫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 

現在做一個「create.js.erb」文件中app/controllers/posts/用下面的代碼

#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 %> 

現在創建一個_post.html.erb文件中「應用程序/控制器/職位/」,寫的HTML你想在視圖內播放和渲染