Ruby on Rails和Ajax

时间:2015-07-18 14:28:36

标签: jquery ruby-on-rails ruby ajax

我已经阅读了这个主题的所有答案,但我请求你的帮助bc我仍然无法找到解决方案。我创建投票计数器,将从模型增加读取喜欢计数器和写更新的计数器++到模型。 我有file:///storage/emulated/0/Download/Buzzer - 1.mp3

index.html.erb

模型架构:

<div class="row">
<div id="tasks"><%= render @like %></div>
</div>
<div class="row">
  <div id="like-form"></div>
</div>
<div class="col-md-2 col-md-offset-4">
    <%= link_to new_like_path, remote: true do %>
      <button class="btn btn-default">New</button>
    <% end %>
  </div>

我有create_table "likes", force: true do |t| t.string "count" t.datetime "created_at" t.datetime "updated_at" end

LikesController

def new if Like.first.count.to_i >= 0 then Like.create(count: "0") end @like = Like.first.count.to_i @like++ Like.update(0, :count => @like.to_s) end 档案

new.js.rb

我有 $('#like-form').html("<%= j (render 'form') %>"); $('#like-form').slideDown(350);

_form.html.erb

它不想渲染,我得到了

  

&#39;零&#39;不是与ActiveModel兼容的对象。它必须实施   :to_partial_path

我在rails中很新,希望这一切都有道理。我听说过实现此任务的不同方法,但请帮助我修复提供的方法:将表单w / ruby​​变量呈现为html。

1 个答案:

答案 0 :(得分:1)

您不必渲染实例变量,您可以写:

remove_column :likes, :count, :integer
add_column :likes, :count, :integer, default: 0

此外,您的计数列应为整数类型。如果count列的类型为integer,则可以在数据库中将缺省值设置为0。以下是执行此操作的步骤:

  1. 在您的控制台类型中:rails生成迁移ChangeCountTypeInLike
  2. 在您的迁移文件中添加:

    rake db:migrate
  3. 然后在您的控制台中运行count

  4. 由于您的new列现在是整数类型,此列的默认值现在为0.您可以将控制器中的@like = Like.create @like.increment!(:count) 操作更改为:

    $('#like-form').html("<%= j (render 'form') %>");
    $('#like-form').slideDown(350);
    

    Rails有一个increment方法可以使用。此外,您应该参考您想要的内容,如果您不喜欢某些内容,我也不知道此代码的用途。

    我不明白你想要达到的目标:

    $("div#tasks).text(<%= j(@like) %>);
    

    但如果您只是想更新自己喜欢的内容,可以写下:

    didInsertElement

    如果你能描述你想要达到的目标,我可以帮助你。