Rails:使用控制器呈现js.erb模板

我有一个rails应用程序尝试合并一些AJAX,其中点击新打开一个模态窗口和一个表单。 我希望能够显示validation错误,如果它失败,那么在我的创建操作中,我想重新渲染new.js.erb文件。 这是正确的方法吗?

def create @place = Place.new(params[:place]) if @place.save redirect_to places_path, :notice => "Successfully created place" else render "new.js.erb" end end 

我得到的结果是在我的浏览器中转义js文本,如:

 $("#new_grouping").html("

我已经尝试将各种选项放入渲染块但没有运气。 有小费吗?

最好的做法是支持AJAX和非AJAX调用,以防用户因任何原因关闭了javascript。

 def create @place = Place.new(params[:place]) respond_to do |format| if @place.save format.html { redirect_to places_path, :notice => "Successfully created place" } format.js # renders create.js.erb, which could be used to redirect via javascript else format.html { render :action => 'new' } format.js { render :action => 'new' } end end end 

render :action => 'new'实际上呈现了控制器动作new的模板,它分别导致new.html.erbnew.js.erb这取决于它是非AJAX还是AJAX调用。

new.js.erb中你的ERB / javascript代码:

 $("#new_grouping").html("<%= escape_javascript(...) %>"> 

我知道,在控制器中渲染部分是一个坏主意,因为那时响应可能没有内容类型,有些浏览器无法理解这一点。 如果它是一个附加到行动的文件你应该写

 render :action => "create" 

或者如果你需要渲染一个单一的部分然后在你的动作文件写

 <%= render :partial => "path/to/partial" %> 

正如我所说,那么你不会遇到内容类型的问题