jquery - Rails - 从不同 Controller 提交后刷新 View

标签 jquery ruby-on-rails ruby-on-rails-3

表单提交在与当前 View 不同的 Controller 上创建项目后,我无法刷新 View 。

我有 2 个模型,用户和项目。用户有多个项目。

用户“显示” View 列出了其所有项目。在 View 中,我有一个部分用于将所有项目渲染到单独的表行中:

<table class="items">
          <%= render @items%>
</table>

在同一个 View 中,我在底部有一个用于创建新项目的 div,该 div 包含一个 Items 部分(其中包含用于创建新项目的表单):

<div id="new_item_dialog">
    <%= render :partial => '/items/new_items' %>
</div>

此“new_item_dialog”div 通过 jquery 弹出到对话框中,并具有 :remote => true 来执行异步项目“创建”:

$('#open-dialog').click(function(){
    $item_dialog.dialog('open');
});

$('.item_submit').click(function(){
    $item_dialog.dialog('close');       
});

我遇到的问题是在提交新项目后刷新用户的“显示”页面。

从项目的“创建” Controller 到用户的显示页面的简单重定向不会刷新数据

  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 

任何帮助将不胜感激!

注意:在将项目保存在项目的“创建” Controller 中后,我还尝试了“渲染@user”,以重新渲染用户的“显示” View ,但我得到了与以下相同的“MissingTemplate”错误如上所述。

更新: 还尝试过:

def create
    @user = cur_user
    @task = @user.item.build(params[:item])
    if @item.save
      render :partial => "items/item"

并且(替换上面 Controller 中的渲染)

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);
              }
        });
    });

最佳答案

您可以使用redirect_to user_path(@user)重定向(而不是渲染)来刷新整个页面

或者

您可以在创建项目时部分返回项目。发生的事情是这样的:

  1. 通过ajax提交表单来创建项目
  2. item 在您的 Controller 中创建,渲染 :partial => "/path/to/item"
  3. 您将收到 html,因此在 jquery 的 ajax 调用中放置一个成功函数来替换当前的部分

    $.ajax({... ... 成功:函数(html){ $(".items").html(html);//如果你想再次渲染整个表格,但将表格放在部分表格中,也可以使用replaceWith(html) });

关于jquery - Rails - 从不同 Controller 提交后刷新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5373844/

相关文章:

javascript - 单击图像或单选按钮时显示和隐藏 div

jquery滚动到表单输入

mysql - Rails 和 MySQL : Array winds up with ---[] or --- stored in the DB

ruby-on-rails - 如何在 Controller 中不使用 Rails Action 参数

ruby-on-rails - 如何更新回形针附件字段记录

javascript - 如何访问 DIV 的 innerHTML onclick(ng-click)Angular JS 中的按钮

javascript - 无法访问 jQuery $.post 中的变量

ruby-on-rails - 在 Rails 中运行 bundle exec rspec spec/requests/static_pages_spec.rb 时出错

jquery - 如何在 Ruby on Rails 中覆盖 Materialize CSS?

ruby-on-rails - Rails 3 - 循环获取集合?