我正在使用rails 2.3.8并且我将使用名为_show_venue.html.erb的部分加载模式对话框。在这部分内部,我添加了link_to_remote来编辑每个场地。
_show_venue.html.erb ::
<table>
<tr>
<th>Country</th>
<th>Place</th>
<th>Color</th>
</tr>
<% @venues.each do |venue| %>
<tr>
<td><%=h venue.country_id %></td>
<td><%=h venue.place %></td>
<td><%=h venue.color %></td>
<td><%= link_to_remote 'Edit', :url => {:controller => 'venues', :action => 'edit', :id=>venue.id } %></td>
</tr>
<% end %>
</table>
这是我的控制器代码::
def edit
@venue = Venue.find(params[:id])
end
edit.js.rjs ::
page.replace_html 'edit_venue', :partial => 'edit_form'
page<< "$j ('#event_actions').dialog({
title: 'Edit venue
modal: true,
width: 500,
close: function(event, ui) { $j ('#event_actions').dialog('destroy') }
});"
但是当我运行它时,它找不到edit.js.rjs文件。为什么会这样?有人可以解释一下吗?
答案 0 :(得分:1)
将文件edit.js.rjs
重命名为edit.rjs
被修改
我认为您必须以其他方式执行此操作,因为您需要动态对象@venue
,
试试以下
def edit
@venue = Venue.find(params[:id])
render :update do |page|
page.replace_html 'edit_venue', :partial => 'edit_form', :object => @venue
page<< "$j ('#event_actions').dialog({
title: 'Edit venue
modal: true,
width: 500,
close: function(event, ui) { $j ('#event_actions').dialog('destroy') }
});"
end
end
您的链接应如下[您必须撰写:method
]
<%= link_to_remote 'Edit', :url => {:controller => 'venues', :action => 'edit', :id=>venue.id }, :method=>'put' %>
如果以上不起作用,您也可以尝试“发布”
答案 1 :(得分:1)
您应该对控制器方法进行以下更改:
respond_to do |format|
format.js
end
这样它就会找到edit.js.rj并渲染它。
编辑:404 HTTP状态是主要问题,因为缺少路线。
匹配场地/:id / edit的路线应解决问题。
答案 2 :(得分:0)
将edit.js.rjs重命名为edit.js.erb
将以下内容添加到编辑方法的末尾:
respond_to do |format|
format.js
format.html
end
重启服务器