Неопределенный идентификатор, когда я использую самоцвет Friendly_id - PullRequest
0 голосов
/ 18 декабря 2018

Я использую friendly_id gem для изменения моих URL.Но у меня есть проблема с моей системой лайков.

Для использования friendly_id я меняю свой контроллер :

@software = Software.find(params[:id])

на

@software = Software.friendly.find(params[:id])

Так что мои like.js не распознают идентификатор моей модели.Вот ошибка:

ActionView::Template::Error (undefined method `id' for nil:NilClass):
    1: $('#like-icon-software-<%= @software.id.to_s %>').
    2:   html('<%= j render "softwares/like_icon", {is_liked: @is_liked, software: @software} %>');

Спасибо за вашу помощь и извините за мой английский ..

РЕДАКТИРОВАТЬ 1:

Я вхожу впараметры:

Processing by LikesController#create as JS Parameters: {"software_id"=>"Odoo"} 

вместо

Processing by LikesController#create as JS Parameters: {"software_id"=>"1"} 

без friendly_id.

models / software.rb

extend FriendlyId
friendly_id :title, use: [:slugged, :finders]

def is_liked user
    Like.find_by(user_id: user.id, software_id: id)
end

Как продолжить получать идентификатор, а не «слизняк»?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

В вашем like.js не могли бы вы использовать это:

$('#like-icon-software-<%= software.id.to_s %>')

вместо этого:

$('#like-icon-software-<%= @software.id.to_s %>')
0 голосов
/ 19 декабря 2018

Я думаю, что вы получаете 'название' модели 'программного обеспечения' в params software_id, поскольку вы использовали его в качестве слагаемого для friendly_id.Software.friendly.find(params[:id]) приносит запись для соответствующего friendly_id.Вы получите идентификатор следующим образом:

@software = Software.friendly.find(params[:id])
@software.id
...