Rails 最后调用一个方法

Rails Call A Method Lastly In Action

我的控制器中有类似的东西:

def index
  @votes = Vote.all
end

private

def search
  @votes = OtherVotes.all
end

我想在索引操作中使用搜索方法,但我不想从索引中删除我的@votes 变量。如果我使用 before_action,它会在操作之前调用方法,所以 @votes 不会改变。是否可以在我的 votes 变量之后调用搜索方法或忽略变量而不删除。

尝试

class TempController < ApplicationController
  after_action :search
  def index
   @votes = Vote.all
  end

  private

  def search
    @votes = OtherVotes.all
  end
end

当我想要构建一个简单的搜索时,我通常会使用这种方法:

http://railscasts.com/episodes/37-simple-search-form

在您的 vote.rb 文件中创建一个方法:

class Vote
  def self.search(search)
    if search
      self.where(:all, conditions: ['name LIKE ?', "%#{search}%"])
    else
      self.where(:all)
    end
  end
end

这意味着当您执行 Vote.search('term') 时,您将调出任何具有相似名称的记录。替换您要搜索的任何术语的名称(即标题或类别)。 如果没有输入搜索词,此方法只需 returns 每个实例。这意味着您可以让您的控制器看起来像这样:

def index
  @votes = Vote.search(params[:search])
end

最终的视图如下:

<% form_tag votes_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>

这将使用搜索词参数向 votes_path(您的控制器上的索引操作)发送获取请求。如果输入一个,则搜索将 return 相关实例,否则将 return 全部。