Rails Ajax调用另一个控制器

时间:2015-01-02 23:06:07

标签: jquery ruby-on-rails ajax

这是我第一次使用Ajax而且我很丢失。我想从公司控制器管理的视图中调用我的company_pays控制器的索引方法。目的是使用从单击company_content时触发的AJAX请求返回的index数据替换div <%= link_to " Payments", company_pays_path(current_company), :method => :get, remote: true %>。到目前为止,这是我的代码:

  

视图/公司/ company_home.html.erb

<% content_for :sidebar do %>

  <h1></h1>
  <div class="navbar-default sidebar" role="navigation">
        <div class="sidebar-nav navbar-collapse">
            <ul class="nav" id="side-menu">
                <li>
                    <li><%= link_to " Edit Company", edit_company_path(current_company), :method => :get %></li>
                </li>
                <li>
                    <li><%= link_to " Payments", company_pays_path(current_company), :method => :get, remote: true %>
                    </li>
                </li>                
            </ul>
        </div>
                <!-- /.sidebar-collapse -->
  </div><!-- /.navbar-static-side -->  

<% end %>


<h1><%= current_company.name %></h1>

<div id="company_content"></div>
  

视图/ company_pays / index.js.erb的

$('#company_content').update('<%= j render ("company_pays(current_company)") %>');
  

控制器/ company_pays_controller.rb

def index
  @company_pays = CompanyPay.where(company_id: current_company.id).order(:id) 

  respond_to do |format|
    format.js
  end

end

我一直在看这几个小时,但我无处可去。我猜这个问题在index.js.erb文件中,但我不知道如何正确地做到这一点。有人可以帮忙吗?

感谢您寻找

  

修改1

我有这个工作,但我不是百分之百确定原因。

我改变了以下几行: -

  

视图/公司/ company_home.html.erb

 <li><%= link_to " Payments", company_pays_path(current_company), :method => :get, remote: true %></li>

更改为

 <li><%= link_to " Payments", company_pays_path, :method => :get, remote: true %></li>
  

视图/ company_pays / index.js.erb的

$('#company_content').update('<%= j render ("company_pays(current_company)") %>');

更改为

$('#company_content').html('<%= j (render "index", collection: @company_pays) %>');

然后我创建了文件views / company_pays / _index.html.erb并从主索引页面复制了代码。

这是有效的,但我不是百分之百确定原因。任何人都可以提供帮助: -

  1. index.js.erb中,如果我添加render partial: "index"字样,则会列出company_pays 3次。在我的数据库中总共有3个,所以我猜它与此有关但我无法弄清楚为什么它会在3个单独的块中渲染所有3个。
  2. index.js.erb中,即使代码为render "index",它也会呈现文件'_index.html.erb'。我已经检查了这一点以确保它实际上是渲染部分而且它是但我无法理解为什么。
  3. 至少它正在发挥作用。感谢所有人的帮助。

1 个答案:

答案 0 :(得分:0)

j是javascript_tag

的缩写
javascript_tag "alert('All is good')"

返回:

<script>
//<![CDATA[
alert('All is good')
//]]>
</script>

在以下代码中,company_payscurrent_company可能未定义,因此它们会产生问题。在:remote => true server side js中,问题在于很难发现错误。

$('#company_content').update('<%= j render ("company_pays(current_company)") %>');

另外,我认为您可以渲染部分并发送current_company和company_pays等值以及

$('#company_content').update('<%= render 'company_pays' locals: { current_company: current_com} %>');