我有一个非常简单的Ruby On Rails应用程序,前端有bootstrap 3:我有交易,每笔交易都有很多机会。
在每个Deal页面(Deal 1的url类似于myapp.com/id=1),我想要一个文本链接,上面写着“查看Deal的机会”,点击Bootstrap模式中的内容外观时必须触发该链接。
非常基本,但出于特定原因,我希望通过Ajax加载模式的内容(当用户加载Deal页面时,内容不可见,但只有当他们单击“查看Deal的机会”链接时才可见)
我在网上找到了很多关于Rails4/ajax/Forms和其他使用ajax的东西的资源,但不是通过ajax在模式中显示内容/文本的简单资源应该很容易,但我卡住了。
控制器/交易控制器.rb

def showcase
    deals = Deal.friendly.find(params[:id])

    respond_to do |format|
      format.html # showcase.html.erb
      format.json { render json: @deal }
    end
end

def show_opportunities

    @opportunities = Opportunity.where('deal_id = ? AND deal_type = ?',
                             @deal.id, "high tech").first

    respond_to do |format|
      format.js
    end

  end

app/views/deals/showcase.html.erb
this is the beginning
<%= render 'deals/deal_info_zone' %>
this is the end

查看/deals/\u deal\u info\u zone.html.erb
<div id="zoneA">

  <div style="color:red;padding-top: 150px;">
    <%= link_to "view infos of Opportunities", deal_opportunities_modal_path, remote: true %>
  </div>
</div>

下面是我想通过ajax触发的模式:视图/交易/机会模式
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">

      <div class="modal-body">

          <%= @opportunity.name %> <br/>

      </div>

    </div>
  </div>
</div>

路线.rb
match '/deals/:id', # this is the Deal page
    to:   'deals#showcase',
    via:  'get',
    as:   :deal_page

match '/opportunity_modal',
    to:   'deals#show_opportunities',
    via:  'get',
    as:   :deal_opportunities_modal

我是RoR的新手,从没用过ajax,ujs也许我觉得它缺少了一些东西,比如javascript代码和xhr请求……
当前的情况是这样的:当我进入一个deal页面(对于ex page/deal id=1)时,文本链接“查看机会信息”。浏览器指向http://localhost:3000/opportunity_modal但当我点击它时它不会触发任何东西什么都没发生firebug控制台上没有显示任何内容。

最佳答案

当您单击一个remote: true链接时,rails并不是在寻找opportunity_modal.html.erb,而是在寻找opportunity_modal.js.erb您需要做的是将模态放在一个部分中,然后用JavaScript呈现它。
将模态代码放入名为views/deals/_opportunity_modal.html.erb的部分。
创建一个views/deals/opportunity_modal.js.erb文件,该文件将在触发此操作时呈现并显示模式。

$('body').append('<%= j render partial: "views/deals/opportunity_modal" %>');
$('#myModal').modal('show');

另外,在模式中有一个变量@opportunity,但它没有在控制器中定义,所以也要确保定义它。

关于javascript - Rails 4-通过Ajax在引导模态中显示数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32771331/

10-13 02:17