当我使用Friendly_id gem时,未定义的“ id”

时间:2018-12-18 16:39:33

标签: ruby-on-rails friendly-id

我正在使用 friendly_id gem 修改我的网址。 但是我的点赞系统存在问题。

要使用friendly_id,请更改我的控制器

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

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

所以我的 like.js 无法识别我的模型的ID。 这是错误:

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

如何继续接收ID,而不是“子弹”?

2 个答案:

答案 0 :(得分:0)

我认为您已经在params software_id中获得了模型“软件”的“标题”,因为您已将其用作friendly_id的代码。 Software.friendly.find(params[:id])为匹配的friendly_id带来记录。您将获得如下的ID,

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

答案 1 :(得分:0)

在您的 like.js 中,您可以使用以下代码吗:

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

代替此:

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