无法使用' id' =找到奖励,而在rails控制台中,一切正常

时间:2017-04-24 08:48:31

标签: ruby-on-rails activerecord parameters

我的params哈希看起来像这样:Parameters: {"id"=>"6", "bonus_id"=>"2", "bonus_title"=>"deposit-match-row"},这是我的控制器:

  def load_more_bonuses
    @more_casinos = []
    @bonus_title = params[:bonus_title]
    bonus = Bonus.find(params[:bonus_id])
    @more_casinos << bonus.casinos.where('casinos.id >?', params[:id]).order(id: :asc).limit(6).uniq

    respond_to do |format|
      format.js
    end
  end

我收到以下错误:ActiveRecord::RecordNotFound (Couldn't find Bonus with 'id'=)在rails控制台中一切正常,这样做:bonus = Bonus.find(2)给了我奖金记录。上面的代码有什么问题,可以做些什么来摆脱错误?感谢。

修改

完整服务器日志:

Started GET "/load_more_bonuses?id=6&bonus_id=2&bonus_title=deposit-match-row" for 127.0.0.1 at 2017-04-24 12:08:00 +0300
Processing by BonusesController#load_more_bonuses as JS
  Parameters: {"id"=>"6", "bonus_id"=>"2", "bonus_title"=>"deposit-match-row"}
Started GET "/load_more_bonuses" for 127.0.0.1 at 2017-04-24 12:08:00 +0300
Processing by BonusesController#load_more_bonuses as JS
  Casino Load (7.2ms)  SELECT  "casinos".* FROM "casinos" WHERE "casinos"."casino_of_the_month" = $1 LIMIT $2  [["casino_of_the_month", true], ["LIMIT", 1]]
  Casino Load (1.4ms)  SELECT  "casinos".* FROM "casinos" WHERE "casinos"."casino_of_the_month" = $1 LIMIT $2  [["casino_of_the_month", true], ["LIMIT", 1]]
  Bonus Load (1.2ms)  SELECT  "bonuses".* FROM "bonuses" WHERE "bonuses"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 1]]
  Bonus Load (15.7ms)  SELECT  "bonuses".* FROM "bonuses" WHERE "bonuses"."id" = $1 LIMIT $2  [["id", nil], ["LIMIT", 1]]
  Rendering bonuses/load_more_bonuses.js.erb
Completed 404 Not Found in 27ms (ActiveRecord: 17.1ms)



ActiveRecord::RecordNotFound (Couldn't find Bonus with 'id'=):

  Casino Load (2.2ms)  SELECT  DISTINCT "casinos".* FROM "casinos" INNER JOIN "casino_bonuses" ON "casinos"."id" = "casino_bonuses"."casino_id" WHERE "casino_bonuses"."bonus_id" = $1 AND (casinos.id >'6') ORDER BY "casinos"."id" ASC LIMIT $2  [["bonus_id", 2], ["LIMIT", 6]]
app/controllers/bonuses_controller.rb:75:in `load_more_bonuses'
  Rendering /home/spacechick/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb
  Rendering /home/spacechick/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_source.text.erb
  Rendered /home/spacechick/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_source.text.erb (0.7ms)
  Rendering /home/spacechick/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb
  Rendered /home/spacechick/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (0.8ms)
  Rendering /home/spacechick/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb
  Rendered /home/spacechick/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (1.2ms)
  Rendered /home/spacechick/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb (26.8ms)
   (0.5ms)  SELECT COUNT(*) FROM "ratings" WHERE "ratings"."casino_id" = $1  [["casino_id", 10]]
   (0.4ms)  SELECT SUM("ratings"."score") FROM "ratings" WHERE "ratings"."casino_id" = $1  [["casino_id", 10]]
  CACHE (0.0ms)  SELECT COUNT(*) FROM "ratings" WHERE "ratings"."casino_id" = $1  [["casino_id", 10]]
  CACHE (0.0ms)  SELECT COUNT(*) FROM "ratings" WHERE "ratings"."casino_id" = $1  [["casino_id", 10]]
  CACHE (0.0ms)  SELECT SUM("ratings"."score") FROM "ratings" WHERE "ratings"."casino_id" = $1  [["casino_id", 10]]
  CACHE (0.0ms)  SELECT COUNT(*) FROM "ratings" WHERE "ratings"."casino_id" = $1  [["casino_id", 10]]
  Rendered bonuses/_load_more_casinos_list.html.erb (150.9ms)
  Rendered bonuses/load_more_bonuses.js.erb (154.1ms)
Completed 200 OK in 193ms (Views: 159.7ms | ActiveRecord: 11.5ms)

编辑2

_load_more_casinos_list.html.erb

<% @more_casinos.flatten.uniq.sort_by{ |id| id[:id] }.reverse!.take(6).each do |casino| %>
  <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
    <div class="bonus-casino-index-item" data-id="<%= casino.id %>">
      <div class="bonus-casinos-index-item-flip">
        <div class="front">
          <div class="bonus-casino-background" style="background-color: <%= casino.background_color %>">
            <div class="bonus-info-sign">
              <span class="glyphicon glyphicon-info-sign"></span>
            </div>
            <% if casino.new === true %>
              <div class="bonus-casino-new"></div>
            <% elsif casino.hot === true %>
              <div class="bonus-casino-hot"></div>
            <% elsif casino.exclusive === true %>
              <div class="bonus-casino-exclusive"></div>
            <% end %>
            <div class="bonus-casino-logo">Logo will be here</div>
            <div class="bonus-casino-rating">
              <div class="rateit" data-rateit-value="<%= casino.average_rating %>" data-rateit-ispreset="true" data-rateit-readonly="true" data-rateit-mode="font" style="font-size:20px"></div>
            </div>
            <div class="bonus-casino-bonus-info">
              <%= casino.bonus_info %>
            </div>
          </div>
        </div>
        <div class="back">
          <div class="bonus-casino-background-back">
            <div class="bonus-casino-back-close">
              <span class="glyphicon glyphicon-remove-sign"></span>
            </div>
            <p class="bonus-casino-bonus-info-back"><%= casino.bonus_info.truncate(50) %></p>
            <p class="bonus-casino-average-rating">Score: <%= casino.average_rating.round(2) %></p>
            <div class="bonus-casino-bonus-description"><%= strip_tags(casino.description).truncate(120) %></div>
          </div>
        </div>
      </div>
      <div class="bonuses-page-casino-list-links">
        <%= link_to 'Review', casino, class: 'bonus-casino-index-item-review' %>
        <%= link_to 'Join now', '#', class: 'bonus-casino-index-item-join-now' %>
      </div>
    </div>
  </div>
<% end %>

编辑3

puts @more_casinos给了我:

Casino Load (4.1ms)  SELECT  "casinos".* FROM "casinos" WHERE "casinos"."casino_of_the_month" = $1 LIMIT $2  [["casino_of_the_month", true], ["LIMIT", 1]]
  Casino Load (1.8ms)  SELECT  DISTINCT "casinos".* FROM "casinos" INNER JOIN "casino_bonuses" ON "casinos"."id" = "casino_bonuses"."casino_id" WHERE "casino_bonuses"."bonus_id" = $1 AND (casinos.id >'6') ORDER BY "casinos"."id" ASC LIMIT $2  [["bonus_id", 2], ["LIMIT", 6]]
  Bonus Load (0.4ms)  SELECT  "bonuses".* FROM "bonuses" WHERE "bonuses"."id" = $1 LIMIT $2  [["id", nil], ["LIMIT", 1]]
#<Casino:0x000000082c8820>

load_more_bonuses.js.erb

<% if @more_casinos.any? %>
  $('#<%= @bonus_title.parameterize %>-row').append('<%= j render 'bonuses/load_more_casinos_list' %>');
<% end %>

编辑4

application.js

中的Ajax调用
$('.bonus-casinos-load-more').click(function () {
    var lastId = $(this).parent().parent().parent().children('.first-row').children().last().children().attr('data-id');
    var bonusId = $(this).attr('data-id');
    var bonusTitle = $(this).parent().parent().parent().children('.first-row').attr('id');

    $.ajax({
      type: 'GET',
      url: $(this).attr('href'),
      data: {
        id: lastId,
        bonus_id: bonusId,
        bonus_title: bonusTitle
      },
      dataType: 'script'
    });
  });

1 个答案:

答案 0 :(得分:0)

问题应该与视图有关,因为在您的日志中,它会发送2个请求。

一个请求使用合法查询字符串,1个请求查询字符串为空。

Started GET "/load_more_bonuses?id=6&bonus_id=2&bonus_title=deposit-match-row" for 127.0.0.1 at 2017-04-24 12:08:00 +0300
Processing by BonusesController#load_more_bonuses as JS
Parameters: {"id"=>"6", "bonus_id"=>"2", "bonus_title"=>"deposit-match-row"}

Started GET "/load_more_bonuses" for 127.0.0.1 at 2017-04-24 12:08:00 +0300

在您的视图文件中,它会发送另一个请求,但没有参数。

通过ajax调用发送,然后检查参数,找出它为空的原因。在console.log代码中添加一些js