Rails-way - куда поместить этот вспомогательный метод? - PullRequest
0 голосов
/ 12 июля 2010

Я немного пытаюсь найти подходящее место для вспомогательного метода.Метод в основном «проверяет» объект пользовательской модели и должен возвращать некоторую информацию о «прогрессе» пользователя, например.«Вам нужно добавить фотографии», «Заполните свой адрес» или «Добавить свой адрес электронной почты».Ни одно из условий, которые я проверяю, не является обязательным, это просто как функциональность «Это полнота вашего профиля», как это видно на LinkedIn и т. Д.

У каждого из этих «действий» есть URL, где пользовательможет завершить действие, например.URL-адрес страницы, на которую они могут загрузить фотографию профиля, если она отсутствует.

Так как мне нужен доступ к моим именованным помощникам маршрутов (например, new_user_image_path), мне трудно разобраться с Rails-путемструктурирования кода.

Я хотел бы вернуть объект с DSL, как это:

 class UserCompleteness
     def initialize(user)
     end

     def actions
        # Returns an array of actions to be completed
     end

     def percent
        # Returns a 'profile completeness' percentage
     end
 end

И использовать его с чем-то вроде: @completeness = user_completeness(current_user)

Однако, если я добавляю это в свой application_helper, у меня нет доступа к моим именованным помощникам маршрутов.То же самое происходит, если я добавлю его в свою пользовательскую модель.

Где мне разместить этот вспомогательный метод?

Ответы [ 2 ]

0 голосов
/ 12 июля 2010

Эта проблема похожа на проблему почтовых программ.Они являются моделями и не должны пересекать границы MVC, но должны генерировать представления.Попробуйте это:

class UserCompleteness

  include ActionController::UrlWriter

  def initialize(user)
  end

  def actions
    # Returns an array of actions to be completed
    new_user_image_path(user)
  end

  def percent
    # Returns a 'profile completeness' percentage
  end
 end

Но учтите, что вы нарушаете инкапсуляцию MVC, что может затруднить тестирование.Если вы можете обойтись без некоторых методов в помощнике пользователей вместо класса, это может быть лучше.

0 голосов
/ 12 июля 2010

Из всего, что я получил, я думаю, что вам нужен метод, который вы можете использовать в Controller, а также в Views.Для выполнения этого простого метода добавления в application_controller.rb и названии его hepler_method

Пример: -

  class ApplicationController < ActionController::Base
    helper_method :current_user

    def current_user
      @current_user ||= User.find_by_id(session[:user])
    end

  end

вы можете использовать метод current_user в обоих контроллерахкак просмотров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...