У меня есть коллекция (или сообщение, если вы предпочитаете), созданный пользователем. Коллекция может быть общедоступной или частной (по умолчанию это верно в базе данных). Я хочу, чтобы пользователь видел все свои коллекции, но хочу, чтобы кто-нибудь мог видеть, что коллекции 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
Пожалуйста вставьте collection.rb –
нормально просто добавили его – crentist