3

ユーザーがレビューを入力するこのフォームがあります。レビューを保存するには、ユーザーがFacebookで署名されている必要があります。を使用しbefore_filterて、ユーザーがサインインしているかどうかを確認します。

しかし、私はこのエラーを受け取ります:undefined local variable or method signed_in_user'

もう1つは、Facebookでユーザーをログインさせ、レビューを保存するにはどうすればよいですか?失くしてユーザーに同じレビューを再度入力させることなく。

レビューフォーム:

<%= form_for [@school, Review.new] do |f| %>
 <%= f.text_area :content %>
    <% if current_user %>
      <%= f.submit 'Save my review', :class => "btn" %>
    <% else %>
      <%= f.submit 'Save my review and sign me into facebook', :class => "btn" %>
    <% end %>
<%end %>

ReviewsController

class ReviewsController < ApplicationController
    before_filter :signed_in_user, only: [:create, :destroy]

    def create
        @school = School.find(params[:school_id])
        @review = @school.reviews.new(params[:review])

        @review.user_id = current_user.id

        if @review.save
            redirect_to @review.school, notice: "Review has been created."
        else
            render :new
        end
    end

    def new
        @school = School.find_by_id(params[:school_id])
        @review = Review.new
    end
end

ReviewsHelper

module ReviewsHelper
    def signed_in?
        !current_user.nil?
    end

    def signed_in_user
        unless signed_in?   
            redirect_to "/auth/facebook"
        end
    end
end

Facebookからユーザーを認証するためにomniauthを使用しています。

4

3 に答える 3

2

includeあなたReviewsHelperのコントローラー:

class ReviewsController < ApplicationController
    include ReviewsHelper #or helper :reviews
    before_filter :signed_in_user, only: [:create, :destroy]

    def create
        @school = School.find(params[:school_id])
        @review = @school.reviews.new(params[:review])

        @review.user_id = current_user.id

        if @review.save
            redirect_to @review.school, notice: "Review has been created."
        else
            render :new
        end
    end

    def new
        @school = School.find_by_id(params[:school_id])
        @review = Review.new
    end
end
于 2013-02-24T18:06:08.850 に答える
1

デフォルトでは、ヘルパーはコントローラーに含まれていません。

codeitが提案するようにそれを含めることができます。

ほとんどの人は、プライベートメソッドとしてApplicationControllerにbeforeフィルターを配置します。

編集:

ログインを維持するには、ログインをセッションデータに保存します。Railsガイドでセッションを検索します。

于 2013-02-24T18:09:22.437 に答える
0

私は以前に同じ問題に遭遇しました。ヘルパーは、ビューレイヤーの編集を支援することです。コントローラに「includeBlbalblaHelper」と記述しない限り、before_filterメソッドをデフォルトでヘルパーに書き込むことはできません。

before_filterメソッドは、application_controller.rbにプライベートメソッドとして、またはlib/フォルダーに書き込むことができます。どちらもDRYにとってより良いアプローチだと思います。

于 2013-02-24T18:09:46.683 に答える