2015-07-18 6 views
2

Я прочитал все ответы для этой темы, но я прошу вас помочь bc Я до сих пор не нашел решения. Я создаю счетчик голосов, который будет читать от увеличения модели, любит счетчик и записывает обновленный счетчик ++ в модель. У меня есть index.html.erbRuby on Rails и Ajax

<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 %> 

Он не хочет, чтобы сделать, и я получил

«ноль» не является ActiveModel-совместимый объект. Он должен реализовать : to_partial_path.

Я довольно новый в рельсах, надеюсь, что все это имеет смысл. Я слышал о различных способах реализации этой задачи, но, пожалуйста, помогите мне исправить предоставленный подход: отобразить форму w/ruby ​​variable в html.

+1

Почему столбец 'count' типа' string'? –

+0

Оператор инкремента (++) не существует в рубине или рельсах. Вам нужно будет использовать '@ like + = 1'. –

+0

Я предлагаю просмотреть немного синтаксиса Ruby перед перемещением на рельсы, особенно, как говорит Менелик: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ', ' действительно странно это видеть. Последний, но не список, я считаю, что у вас большая проблема с последним, как в методе 'new':' Like.update (0,: count => @ like.to_s) 'даже не ясно, что вы пытаетесь достичь с ним –

ответ

1

Вы не должны вынести переменную экземпляра, вы можете написать:

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

Кроме того, ваш счетчик столбец должен быть целочисленного типа. Если столбец count имеет тип integer, вы можете установить значение по умолчанию 0 в своей базе данных. Вот шаги, чтобы идти об этом:

  1. В вашем консольного типа: рельсы генерировать миграции ChangeCountTypeInLike
  2. В вашей миграции файла оных:

    remove_column :likes, :count, :integer 
    add_column :likes, :count, :integer, default: 0 
    
  3. Затем запустите rake db:migrate в консоли

Поскольку ваш столбец count теперь имеет тип integer и th е значение этого столбца по умолчанию теперь 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) %>); 

Если вы можете описать то, что вы пытаетесь достичь, я могу вам помочь.