Rails 5 次搜索 gem,语法错误,意外的输入结束

Rails 5 ransack gem, syntax error, unexpected end-of-input

也许整天不停地编码我是瞎子,但我似乎找不到任何错误、遗漏的结尾或错误的输入。

我正在尝试在 rails 中使用搜查搜索 gem 5. 我的代码如下所示:

应用程序控制器:

class ApplicationController < ActionController::Base
  before_filter :site_search

  def site_search
    @search = Post.ransack(params[:q])
    @search_posts = @search.result(distinct: true)
  end
end

Post控制器:

class PostsController < ApplicationController
    def index
        @search = Post.ransack(params[:q])
        @posts = @search.result(distinct: true)
    end
end

表格如下所示:

<div id="search">
   <%= search_form_for @search do |f| %>
       <%= f.search_field :title_or_body_cont, placeholder: 'Type to search' %>
       <%= f.submit  %>
   <% end %>
</div>

错误如下所示:

/.../myapp/app/controllers/posts_controller.rb:6: syntax error, unexpected end-of-input, expecting keyword_end

Extracted source (around line #6):              
4       @posts = @search.result(distinct: true)
5   end
6 end * Red line here, problem with this line i guess *

Request

Parameters:

{"utf8"=>"✓", "q"=>{"title_or_body_cont"=>"e"}, "commit"=>"Search"}

单击搜索按钮时发生崩溃。 site_search 方法有问题,因为当它在控制器中时,所有其他 Post 类 方法也会崩溃(同样的错误),但是如果我删除 site_search 方法,那么所有其他方法都可以正常运行。

感谢 Andrey 和 Max,在我重写 class 中的所有内容后,它开始工作了。 ruby -w 显示:

app/controllers/posts_controller.rb:10: warning: mismatched indentations at 'end' with 'def' at 2
app/controllers/posts_controller.rb:10: syntax error, unexpected end-of-input, expecting keyword_end

这是唯一的警告,所以我想崩溃不应该发生。嗯,我想这是编程。继续。

发生这种情况是因为在您的帖子控制器第 5 行的末尾,在换行符之前,您有 Unicode character 65279, ZERO WIDTH NO-BREAK SPACE。此字符与 end 中的 d 直接相邻。我不能说解释器在不同版本的 Ruby 中处理异常空白字符的确切决定,但我猜测它正在解释你的 end** 代表不可见字符)作为一个四字母标识符,将被解释为变量名或方法调用,而不是三字母关键字 end.