【问题标题】:Rails Call A Method Lastly In ActionRails 调用最后的方法
【发布时间】:2017-03-02 10:26:40
【问题描述】:

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

def index
  @votes = Vote.all
end

private

def search
  @votes = OtherVotes.all
end

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

【问题讨论】:

    标签: ruby-on-rails methods controller action


    【解决方案1】:

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

    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') 时,您将调出任何具有相似名称的记录。替换您正在搜索的任何术语的名称(即标题或类别)。 如果没有输入搜索词,此方法只返回每个实例。这意味着你可以让你的控制器看起来像这样:

    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(控制器上的索引操作)发送一个 get 请求。如果输入一个,则搜索将返回相关实例,否则将返回全部。

    【讨论】:

    • 谢谢。起初它没有用。但后来我写了 self.where 而不是 find ,我做了一些小改动。然后它起作用了。
    【解决方案2】:

    试试

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多