我有一个link_to_remote来渲染对象的编辑动作。但它只是用这个响应更新Dom元素
try { } catch (e) { alert('RJS error:\n\n' + e.toString()); alert(''); throw e }
我的链接如下:
= link_to_remote t("txt.edit"), :update => dom_id(comment), :url => edit_comment_path(comment.id)
评论控制器中的我的编辑操作:
# GET /comments/1/edit
def edit
@comment = Comment.find(params[:id])
respond_to do |format|
format.html
format.js { render :action => "edit" }
end
end
根据日志,请求似乎没问题:
Processing CommentsController#edit (for 127.0.0.1 at 2009-04-08 18:55:36) [GET]
Session ID: 1d4b9b3d3319d5cd556d00d2e053b651
Parameters: {"authenticity_token"=>"5d70f9e5beded361ee7e87ee591512411e8f3eec", "id"=>"18"}
User Columns (2.0ms) SHOW FIELDS FROM `users`
User Load (0.5ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT 1
Account Columns (1.6ms) SHOW FIELDS FROM `accounts`
Account Load (0.2ms) SELECT * FROM `accounts` WHERE (`accounts`.`subdomain` = 'xxx') LIMIT 1
Comment Columns (1.7ms) SHOW FIELDS FROM `comments`
Comment Load (0.6ms) SELECT * FROM `comments` WHERE (`comments`.`id` = 18)
Rendering comments/edit
Completed in 30818ms (View: 2, DB: 7) | 200 OK [http://xx.xxx.rails/comments/18/edit?authenticity_token=5d70f9e5beded361ee7e87ee591512411e8f3eec]
我做错了什么?谢谢你的帮助!
更新: 它通过RJS模板的方式工作 - 这就是我现在解决它的方式。但我仍然更喜欢提供视图的解决方案。否则我必须为此目的创建一个部分(我无法使用rjs页面更新呈现视图 - 至少我不知道如何)。
答案 0 :(得分:1)
或者根本没有抓住“respond_to”,因为在这两种情况下你都是这样做的!只需注释掉:
respond_to do |format|
format.html
format.js { render :action => "edit" }
end
答案 1 :(得分:1)
:script => true
将此添加到link_to_remote
调用,它应该使rails评估返回的任何脚本,而不是输出纯文本。
答案 2 :(得分:0)
你忽略的一件事是模板是什么......我猜这是问题。如果它是ERB尝试类似:
format.js {render:action => “edit.html.erb”}
答案 3 :(得分:0)
看起来您可能忘记在视图中包含对Javascript库的引用,并且该视图正在呈现文字JavaScript而不是解释它。
<%= javascript_include_tag :defaults %>
答案 4 :(得分:0)
当您回复js请求时,render :action => "edit"
会尝试渲染edit.rjs,一个rjs'模板',而不是edit.haml,一个html模板。
答案 5 :(得分:0)
从RJS标记中删除:update选项。我有一个在那里,当我尝试insert_html时,它显示从方法返回的JS而不是在DOM上执行它。所以它显示=&gt;试试{...}
我在视图中从我的link_to_remote语句中取出了:update属性,使用了一个
render: update do |page|
page.insert_html(...)
end
阻止并执行JS返回而不是显示它。
希望有所帮助。