Rails RJS模板显示代码而不是html页面

时间:2010-04-06 14:03:37

标签: ruby-on-rails rjs

在谷歌用Google搜索并伤害了我的大脑几个小时之后,我终于决定发布这个问题了。这是代码......

view1.html.erb
-------------- 
<%=link_to_remote_redbox "Link", :url => {:action => :action1, :id => @some.id} 

some_controller.rb
------------------
def action1
  render :layout => false
end

def action2
  do some processing
end


action1.html.erb
--------------------
<form onsubmit="new Ajax.Request('/some_controller/action2', {asynchronous:true, evalScripts:true, onComplete:function(request){RedBox.close(); return false;}, parameters:Form.serialize(this)}); return false;}" method="post" action="/some_controller/action2">
<input type=text name='username'>
<input type='submit' value='submit'> 
</form>  

action2.rjs
-----------
page.replace_html("some_div", (render(:partial => "some_partial")))

当action2.rjs在其中启动时,该代码应该显示html页面,而不是我得到这个

Element.update("some_div", "<style type=\"text/css\">\n\n..............

正如我读过的其他帖子所建议的,他们说它是由于link_to_remote_redbox函数中的“:update =&gt; some_div”引起的,但显然我的代码没有。

总是感谢帮助。 非常感谢

3 个答案:

答案 0 :(得分:0)

确保布局包含默认的javascript文件。换句话说:

答案 1 :(得分:0)

请尝试以下操作: -

def action2
  render :update do|page|
    page.replace_html, 'some_div', :partial => 'some_partial'
  end
end

OR

<form onsubmit="new Ajax.Request('', {asynchronous:true, evalScripts:true, onComplete:function(request){RedBox.close(); return false;}, parameters:Form.serialize(this)}); return false;}" method="post" action="/some_controller/action2">

答案 2 :(得分:0)

如果你想从你的浏览器调用return ajax调用,那么Salil的方法会起作用..但是如果你想调用更复杂的javascript(在你的控制器中可能很乱),你可以这样做:

def action2
  ...some code
  respond_to do |format|
    format.js
  end
end

这将明确告诉rails返回javascript而不是html。如果您使用jQuery而不是RJS,这也很有用。

干杯!