我正在我的rails应用程序中创建一个类似的模型。首先我写了这样的东西:
- if BonusLikePolicy.new(current_user, bonus).create?
= link_to bonus_likes_path(bonus), method: :delete,
data: { remote: true, behavior: "fragments" } do
span.dislike
- else
= link_to bonus_likes_path(bonus), method: :post,
data: { remote: true, behavior: "fragments" } do
span.like
它工作正常,但正如你在这里看到的几个重复。所以我需要让它干并重写为:
= bonus.link_to_like(bonus, current_user)
创建奖励方法:
def link_to_like(bonus, user)
options = { class: "like", method: :post }
options = { class: "dislike", method: :delete } unless BonusLikePolicy.new(user, bonus).create?
h.link_to(
h.tag(:span, class: options[:class]), h.bonus_likes_path(bonus),
method: options[:method], data: { remote: true, behavior: "fragments" }
)
end
我有一个错误,未定义的方法为nil类销毁。也许我错过了一些但却找不到的东西。请帮助:)
UPD:
我的span图标也没有正确显示(这意味着我在h.tag中传递的类也没有通过)
NoMethodError (undefined method `destroy' for nil:NilClass):
app/controllers/likes_controller.rb:12:in `destroy'
答案 0 :(得分:1)
根据您在工作代码段中的逻辑
将unless
替换为if
options = { class: "dislike", method: :delete } if BonusLikePolicy.new(user, bonus).create?
答案 1 :(得分:1)
我不喜欢重写选项。在我看来,最好做某事......
第1步。
options = (!BonusLikePolicy.new(user, bonus).create? ? { class: "dislike", method: :delete } : { class: "like", method: :post })
第2步。 制作私人方法
def can_not_create_like?
!BonusLikePolicy.new(user, bonus).create?
end
第3步。
options = (can_not_create_like? ? { class: "dislike", method: :delete } : { class: "like", method: :post })