【问题标题】:Ruby on Rails and AjaxRuby on Rails 和 Ajax
【发布时间】:2015-07-18 14:28:36
【问题描述】:

我已阅读此主题的所有答案,但我请求您的帮助,因为我仍然没有找到解决方案。我创建了投票计数器,它将从模型增加喜欢计数器中读取并将更新的计数器++写入模型。 我有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

<%= @like  %>

它不想渲染,我得到了

'nil' 不是 ActiveModel 兼容的对象。它必须执行 :to_partial_path.

我是 Rails 的新手,希望一切都有意义。我听说过实现此任务的不同方法,但请帮助我修复提供的方法:将带有 ruby​​ 变量的表单呈现为 html。

【问题讨论】:

  • 为什么count 列的类型是string
  • 增量运算符 (++) 在 ruby​​ 或 rails 中不存在。你必须使用@like+=1
  • 我建议在转向 Rails 之前先回顾一下 Ruby 语法,尤其是正如 Menelik 所说,++ 在 Ruby 中不存在,then 也不是我在 IF 上看到的关键字,虽然有效,但看到它真的很奇怪。最后但不是列表,我相信你有一个大问题,就像new 方法中的最后一个:Like.update(0, :count =&gt; @like.to_s) 它甚至不清楚你想用它实现什么

标签: jquery ruby-on-rails ruby ajax


【解决方案1】:

你不必渲染实例变量,你可以这样写:

<div id="tasks"><%= @like %></div>

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

  1. 在您的控制台中输入:rails generate migration ChangeCountTypeInLike
  2. 在您的迁移文件中添加:

    remove_column :likes, :count, :integer
    add_column :likes, :count, :integer, default: 0
    
  3. 然后在控制台中运行rake db:migrate

由于您的 count 列现在是整数类型,并且该列的默认值现在是 0。您可以将控制器中的 new 操作更改为:

@like = Like.create
@like.increment!(:count)

Rails 有一个可以使用的increment 方法。你也应该参考你想要喜欢的东西,如果你不喜欢什么,我不知道这段代码有什么用。

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

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

但如果你只是想更新你的喜欢,你可以写:

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

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

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2013-03-06
    • 2015-10-30
    相关资源
    最近更新 更多