首页 > 解决方案 > 当我使用 Friendly_id gem 时未定义的“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。

模型/软件.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 而不是“slug”?

标签: ruby-on-railsfriendly-id

解决方案


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

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

推荐阅读