【问题标题】:Undefined 'id' when i use Friendly_id gem当我使用 Friendly_id gem 时未定义的“id”
【发布时间】:2018-12-18 16:39:33
【问题描述】:

我正在使用 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 而不是“slug”?

【问题讨论】:

  • 你在这个动作的参数中得到了什么?你有 id 里面的参数吗?您可以在日志中查看
  • @Vasilisa 嗨,我得到了参数:由 LikesController#create 作为 JS 参数处理:{"software_id"=>"Odoo"} 而不是 {"software_id"=>"1"} 没有友好的_id。我用更多信息编辑我的问题

标签: ruby-on-rails friendly-id


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答,但我不明白您希望如何实施您的解决方案。因为我已经在 like.js 中寻找@software.id
【解决方案2】:

请在你的 like.js 中使用这个:

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

而不是这个:

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

【讨论】:

  • 感谢您的回复。但这并不能改变问题。我的类似系统没有friendly_id,所以问题是在参数而不是id中调用了slug。
猜你喜欢
  • 2017-05-30
  • 2014-03-19
  • 2015-11-08
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多