我知道这不是有效的代码,但有没有办法在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
答案 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。