У меня есть Listings Controller
(Разработайте систему пользователя) и в Rails 3 я просто использовалbefore_filter: authenticate_user !, за исключением: [: индекс]/Rails 4
before_filter :authenticate_user!, except: [:index]
, чтобы проверить, если пользователь был подписан в перед просмотром определенного списка.
Моя домашняя страница (указатель) показывает внизу вид Объявления, пользователь может их видеть, но как только он нажмет на него, чтобы просмотреть его, он перенаправляется на страницу входа.
Вот почему в моем контроллере я имел вместо
Listing.new -> current_user.listings.new
В Rails 4 вещи, кажется, изменилось, и я не могу найти правильный способ сделать это.
Я искал немного, и обнаружили, что команда была изменена на
before_action :authenticate_user!, :except => [:index]
гость может посмотреть теперь индекс, но если он нажмет на листинг, он не был перенаправлен на страницу входа в систему, а не я получите эту ошибку.
NoMethodError in ListingsController#show
undefined method `listings' for nil:NilClass
# Use callbacks to share common setup or constraints between actions.
def set_listing
@listing = current_user.listings.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
Мои объекты Контроллер
class ListingsController < ApplicationController
before_action :set_listing, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, :except => [:index]
# GET /listings
# GET /listings.json
def index
@listings = Listing.order("created_at desc")
end
# GET /listings/1
# GET /listings/1.json
def show
end
# GET /listings/new
def new
@listing = current_user.listings.build
end
# GET /listings/1/edit
def edit
end
# POST /listings
# POST /listings.json
def create
@listing = current_user.listings.build(listing_params)
respond_to do |format|
if @listing.save
format.html { redirect_to @listing, notice: 'Listing was successfully created.' }
format.json { render action: 'show', status: :created, location: @listing }
else
format.html { render action: 'new' }
format.json { render json: @listing.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /listings/1
# PATCH/PUT /listings/1.json
def update
respond_to do |format|
if @listing.update(listing_params)
format.html { redirect_to @listing, notice: 'Listing was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @listing.errors, status: :unprocessable_entity }
end
end
end
# DELETE /listings/1
# DELETE /listings/1.json
def destroy
@listing.destroy
respond_to do |format|
format.html { redirect_to listings_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_listing
@listing = current_user.listings.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def listing_params
params.require(:listing).permit(:title, :description, :image)
end
end
EDIT: ПРОБЛЕМА 2
Если другой Помнить пользователь пытается просмотреть список которых другой пользователь, созданный им получать это ->
и журнал
U может захотеть do 'authenticate_user' перед' set_listing' – Santhosh
Вы имеете в виду просто переместить authenticate_user над линией set_listing? –
есть. Вы это пробовали? – Santhosh