3 варианта использования и метод индекса - PullRequest
1 голос
/ 21 января 2009

Я написал код ниже, который, кажется, не работает, но если я удаляю последнее выражение if работает, очевидно, для первых двух вариантов использования только. Есть ли лучший способ написать этот код? В моем файле маршрутов у меня есть

map.resources :galleries
map.resources :users, :has_many => :galleries

Пользователь нажимает на ссылку "галереи" и видит список всех опубликованных галерей. (mysite.com/galleries)

Пользователь может перейти по ссылке "мои галереи" и увидеть все свои галерей. (mysite.com/users/21/galleries)

Пользователь может щелкнуть ссылку в профиле другого пользователя и увидеть, что люди опубликовали галереи. (* 1 010 *)

if params[:user_id].blank?
   @galleries = Gallery.find(:all, :conditions => ['visibility_status=  ?', true])
   end

if (params[:user_id] && current_user.id.to_s == params[:user_id])
    @galleries = current_user.galleries
end

if params[:user_id]
    @galleries = Gallery.find(:all, :conditions => ['user_id=? and
    visibility_status = ?', params[:user_id], true])
end 

Ответы [ 2 ]

1 голос
/ 21 января 2009

Маршруты, которые вам кажутся подходящими, используя эти маршруты, у вас есть набор вспомогательных методов, доступных в ваших контроллерах и представлениях: таких как user_galleries_url(@user) и user_galleries_url(@user, @gallery) и другие. Посмотрите на маршрутизацию ресурсов , что вы можете сделать.

Единственное предложение - немного переработать логику и вставить ее в фильтр до
app/controllers/galleries_controller.rb

class GalleriesController < ActionController::Base
  before_filter :get_galleries, :only => 'index'

  private
    def get_galleries
      if params[:user_id]
        if params[:user_id] == current_user.id.to_s
          @galleries = current_user.galleries
        else
          @galleries = Gallery.find(:all, :conditions => ['user_id=? and visibility_status = ?', params[:user_id], true])
        end
      else
        @galleries = Gallery.find(:all, :conditions => ['visibility_status=  ?', true])
      end
    end
end

Вы также можете сделать нечто подобное для get_gallery в действиях show, edit и delete.

1 голос
/ 21 января 2009

ОК - во-первых, я не программист на Ruby.

Но - разве вы не должны использовать if - else if - else if - end и т. Д.?

Ваше третье условие всегда будет истинным, если второе условие истинно, поэтому вы всегда перезаписываете @galleries третьим тестом, даже если вы уже установили его во втором тесте.

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