Rails双渲染

时间:2011-08-09 04:04:23

标签: javascript jquery ruby-on-rails ruby

我知道这不是有效的代码,但有没有办法在Rails中做这样的事情?:

render "$('#dialog').replaceWith(#{render :action => 'new.html.erb'});"

我正在尝试做的基本上是用调用render 'new.html.erb'时返回的内容替换JS对话框的内容。

编辑@Devin M:

控制器动作:

def new
  @act = Act.new(:user_id => current_user.id)
end

def create
  @act = Act.new(params[:act])
  if @act.valid?
    @act.save
  else
    render :action => :new
  end
end

new.js.erb:

$('#dialog').replaceWith("<%= escape_javascript(render(:action => 'new.html.erb')) %>");

完整错误:

Showing app/views/acts/new.js.erb where line #1 raised: undefined method `formats' for nil:NilClass

1 个答案:

答案 0 :(得分:2)

您应该将此代码拆分为单独的视图,因为将其包含在控制器中会违背MVC的想法。我会更新控制器,以便在我想要修改的操作中使用这样的代码响应JS请求:

  respond_to do |format|  
    format.html { redirect_to @item }  
    format.js  
  end

使用扩展.js.erb

创建这样的视图
$('#dialog').replaceWith("<%= escape_javascript(render :partial => "new.html.erb", :locals => { :act => @act }) %>");

然后,您可以通过指向该操作的远程链接或添加您自己的UJS来触发此JS。