表单提交在与当前视图不同的控制器上创建项目后,我无法刷新视图。
我有2个型号,用户和物品。用户有多个项目。
“用户节目”视图列出了其所有项目。在视图中,我有一部分用于将所有项呈现为单独的表行:
<table class="items">
<%= render @items%>
</table>
在同一视图中,我在底部有一个用于创建新项目的div,此div包含Items partial(包含用于创建新项目的表单):
<div id="new_item_dialog">
<%= render :partial => '/items/new_items' %>
</div>
此'new_item_dialog'div通过jquery弹出到对话框中,并具有:remote =&gt;如果执行项'创建'异步:
,则为true$('#open-dialog').click(function(){
$item_dialog.dialog('open');
});
$('.item_submit').click(function(){
$item_dialog.dialog('close');
});
我遇到的问题是在提交新商品后刷新用户的“展示”页面。
从Item的'create'控制器向用户的显示页面进行简单的redirect_to不会刷新数据
def create
@user = cur_user
@item = @user.items.build(params[:item])
if @item.save
redirect_to @user
else
render 'new'
end
我也尝试使用jQuery加载新数据:
$('.new_item').bind('ajax:success', function()
{
$.get('/items/new_item', function (html) {
$('.items').html(html);
});
});
但我收到错误消息:
ActionView::MissingTemplate (Missing template items/show with
非常感谢任何帮助!
注意:在项目的“创建”控制器中保存项目之后,我还尝试了“渲染@user”,以重新渲染用户的“显示”视图,但是我得到了相同的“MissingTemplate”错误上方。
更新 还尝试过:
def create
@user = cur_user
@task = @user.item.build(params[:item])
if @item.save
render :partial => "items/item"
并(替换上述控制器中的渲染)
render :partial => @item
和
render :partial => 'views/items/item', :collection => @user.items
和
render :partial => 'views/items/item', :locals => { :variable => @item}
和
render :action => 'users/show', :layout => 'users'
其中每个人都返回了错误:
ActionView::MissingTemplate (Missing template ..... with {:locale=>[:en, :en], :formats=>[:js, :"*/*"], :handlers=>[:rhtml, :rxml, :builder, :erb, :rjs]} in view paths "test/app/views"):
app/controllers/items_controller.rb:11:in `create'
使用这样的Ajax :(虽然没有使用过,但部分渲染都失败了)
$('.new_item').bind('ajax:success', function()
{
$.ajax({
success: function(html){
$(".items").html(html);
}
});
});
答案 0 :(得分:1)
使用redirect_to user_path(@user)
通过重定向(不呈现)刷新整个页面OR
您可以在创建项目时返回部分项目。会发生什么:
你将在你的jquery的ajax调用中收到html,把一个成功函数替换为你当前的部分
$。AJAX({... ... 成功:function(html){ $( “项目”)HTML(HTML); //如果你想再次渲染整个表,你也可以使用replaceWith(html),但是把表放在局部 });