3

我有这个表格,用户输入评论。用户必须使用 Facebook 签名才能保存评论。我使用 abefore_filter来检查用户是否已登录。

但我得到这个错误:undefined local variable or method signed_in_user'

另一件事是,我如何使用 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 %>

评论控制器

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

评论助手

module ReviewsHelper
    def signed_in?
        !current_user.nil?
    end

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

我正在使用omniauth 对来自facebook 的用户进行身份验证。

4

3 回答 3

2

includeReviewsHelper的控制器:

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 中。

编辑:

要持久登录,请将其保存到会话数据中。在 Rails 指南中查找会话。

于 2013-02-24T18:09:22.437 回答
0

我以前遇到过同样的问题。helper 是帮助编辑视图层的。before_filter 方法默认不能写在 helper 中,除非你在控制器中写 'include BlbalblaHelper'。

您可以将 application_controller.rb 中的 before_filter 方法写为私有方法,或者在 lib/ 文件夹中。我认为它们都是 DRY 的更好方法。

于 2013-02-24T18:09:46.683 回答