2016-12-16 5 views
0

Я создаю как модель в моих рельсах application.Firstly я написал что-то вроде этого:Как правильно реорганизовать код:

- 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 

Он отлично работает, но, как вы видите, вот несколько повторяющихся. Так что мне нужно было сделать это DRY и переписать:

= 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 

Я получил ошибку, неопределенный метод уничтожения для нулевого класса. Может, я что-то пропустил, но не могу найти. Пожалуйста, помогите :)

UPD:

Кроме того, мои значки пролетных не показывать правильно (это означает, что класс, который я прохожу в h.tag также не прошло)

NoMethodError (undefined method `destroy' for nil:NilClass): 


app/controllers/likes_controller.rb:12:in `destroy' 
+0

POSTING свою ошибку обратно след будет быть полезным – Bustikiller

+0

@Bustikiller проверка обновления –

+0

@Bustikiller я думаю o ptions не правильно передает h.tag все –

ответ

1

По логике вы иметь в своем фрагменте кода рабочей

Заменить unless с if

options = { class: "dislike", method: :delete } if BonusLikePolicy.new(user, bonus).create? 
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 }) 
Смежные вопросы