2015-06-06 2 views
0

У меня есть коллекция (или сообщение, если вы предпочитаете), созданный пользователем. Коллекция может быть общедоступной или частной (по умолчанию это верно в базе данных). Я хочу, чтобы пользователь видел все свои коллекции, но хочу, чтобы кто-нибудь мог видеть, что коллекции ONLY стали общедоступными.Как показывать только публичные сообщения, а не показывать частные в Ruby on Rails?

Я имею в виду, что когда кто-либо (Пользователь или нет) отправляется на просмотр коллекции (например, myapp.com/collections/some-collection), если она общедоступна, она будет отображаться, но она закрыта, она будет не показывать и, может быть, сделать «эту коллекцию приватной» и перенаправить. Я мог бы помочь, спасибо!

дб/schema.rb

create_table "collections", force: :cascade do |t| 
    t.string "title" 
    t.integer "user_id" 
    t.boolean "display",  default: true 
    t.text  "description" 
end 

приложение/просмотров/коллекции/show.html.erb

<div class="row"> 
    <div class="col-lg-10"> 
    <h2><%= best_in_place @collection, :title, as: :input %></h2> 
    <p><%= best_in_place @collection, :description, as: :textarea %></p> 
    <%= simple_form_for @collection do |f| %> 
     <%= f.input :display, as: :boolean, checked_value: true, unchecked_value: false %> 
     <%= f.button :submit %> 
    <% end %> 
    </div> 
</div> 

приложение/контроллеры/collections_controller.rb

def show 
    @links = @collection.follows 
    @collection = Collection.find_by_id(params[:id]) if params[:id].present? 
    if params[:id].blank? 
    @collections = Collection.user_collections(params.merge({"user_id" => current_user.id})) 
    end 
end 

приложение/модели/collection.rb

class Collection < ActiveRecord::Base 
     belongs_to :user 
     has_many :follows 

     def links_count 
      follows.count 
     end 

     def add_link(url) 
      status, options, link = Link.link_exist?(url) 
      unless status 
       options = Utils.parse_page(url) 
       link = Link.create(options) 
       link.download_image! 
      end 
      link.follow_link({:collection_id => self.id, :user_id => user_id}) 
     end 

     def self.user_collections(options) 
      conds = [] 
      conds << " user_id = #{options["user_id"]}" if options["user_id"].present? 
      conds = conds.blank? ? [] : conds.join(" AND ") 
      Collection.where(conds).order("updated_at DESC").page(options["page"]).per(16) 
     end 
    end 
+0

Пожалуйста вставьте collection.rb –

+0

нормально просто добавили его – crentist

ответ

2
before_filter :is_public?, only: [ :action_name] 

def is_public? 
    unless @collection.display? 
    redirect_to :back 
    end 
end 
+0

@crentist это работает? –

+0

Чтобы быть более конкретным, я имею в виду, что когда кто-либо отправляется на просмотр коллекции (например, myapp.com/collections/some-collection), если она общедоступна, она будет отображаться, но она закрыта, она не будет и может сделать «Эта коллекция приватная» и перенаправляется. – crentist

+0

проверить обновленный код –

0

@collections = Collection.where('display', true) Это должно вернуть все коллекции, которые могут быть отображены.

Смежные вопросы