2013-12-03 5 views
0

У меня есть простое приложение, в котором я хочу, чтобы музыка была загружена, чтобы иметь «как» функциональность, где она отслеживает количество понравившихся.Прирост не работает в рельсах

Musics Контроллер:

def increment 
@music = @Music.find(params[:music_id]) 
@music.update_attribute(:rating, music.rating = music.rating+1) 
flash[:notice] = "Thanks for rating" 
end 

это, как я зову его в представлении:

<%= link_to "Like This Song", increase_rating_path(music.id) %> 

и это маршрут я имею в месте

match '/increment/:music_id', to: 'musics#increment', :as => 'increase_rating' , via: 'post' 

это кажется как очень простая вещь, но я не могу понять, почему она не работает,

любой совет был бы очень благодарен

ответ

4

Первый. Имя класса модели начинается с символа капитала.

@music = Music.find(params[:music_id]) 

Второй. локальная переменная «музыка» не существует в сфере охвата. Используйте переменную экземпляра назначается сверху '@music' вместо 'музыки'

@music.rating = @music.rating + 1 

Третьего. Вам не нужно назначать 'music.rating = music.rating + 1', Reference

@model.update_attribute(:column, :value) 

Просто используйте значение

@music.update_attribute(:rating, @music.rating + 1) 

Наконец.

def increment 
    @music = Music.find(params[:music_id]) 
    @music.update_attribute(:rating, @music.rating + 1) 
    flash[:notice] = "Thanks for rating" 
end 
+0

и проверьте ваш запрос, получите ли «сообщение» или «сообщение». вы назначили ': via => post' –

+0

Хороший ответ @Taekmin Kim –

0

вы можете использовать приращение! способ увеличение счет. increment!

def increment 
@music = Music.find(params[:music_id]) 
@music.increment!(:rating, by = 1) 
flash[:notice] = "Thanks for rating" 
end 
Смежные вопросы