【问题标题】:Custom Controller Method, Route, & ERB自定义控制器方法、路由和 ERB
【发布时间】:2016-12-04 15:51:06
【问题描述】:

我有一个搜索表单,我需要能够根据是否允许携带宠物进行过滤,但我不知道如何实现这一点。我已经设置了一个路由、一个控制器方法和一个按钮,但这些似乎都不起作用。

listings_controller:

def pets_allowed
  @listings = @listings.where(pets: true)
end

routes.rb:

  get "pets_allowed" => "listings#pets_allowed"

html.erb 文件:

<div>
  <%= link_to 'Pets Allowed', pets_allowed_path, :class => 'button btn-transparent' %>
</div>

【问题讨论】:

    标签: ruby-on-rails ruby postgresql model-view-controller


    【解决方案1】:

    也许你的意思

    def pets_allowed
      @listings = Listing.where(pets: true)
    end
    

    【讨论】:

    • 我试过了。我收到“模板丢失”错误。想法?
    • 当然,模板丢失了,哈哈。您的默认模板名称应为 pets_allowed.html.erb
    • 新模板会将用户重定向到该页面/模板。或者您可以渲染您想要的模板(即您的 index )或使用 ajax 来获取并返回当前页面上的结果。
    • @user3366016 如果我只想有一个按钮,并且如果有一个布尔值标记为 true 的列表,当单击搜索按钮时它只会返回那些列表?
    【解决方案2】:

    这是实现我认为您的目标的另一种方法的基本示例(根据 cmets)。

    这会在您的列表控制器中添加一个新操作,该操作会根据用户从列表索引页面上的搜索表单中输入的结果返回过滤后的结果列表。结果使用相同的索引模板呈现。检查/检索结果的逻辑可以根据您的需要进行修改。如果您只想要一个复选框,则只有一个复选框或一个调用该操作的按钮。

    您可以执行类似的逻辑,但使用 ajax 返回结果并使用部分在索引模板上呈现它们。

    这应该可以为您提供足够的信息,让您通过 Google 获取示例/教程,并尝试不同的方式来获得您想要的东西。

    添加路线:

    # routes.rb
    
    get 'pets_allowed', to: 'things#pets_allowed'
    

    添加新操作:

      # listings_controller.rb
    
      # GET /things
      # GET /things.json
      def index
        @listings = Listing.all
      end
    
      # Get /pets_allowed
      def pets_allowed
        @listings = Listing.where("name LIKE ? and pets = ?", "%#{params[:name]}%", params[:pets] )
        render template: "listings/index",  variable: @listings
      end
    

    将搜索表单添加到您的视图中:

    # listings/index.html.erb
    
    <h1>Listings</h1>
    
    <%= form_tag('pets_allowed', method: 'GET' ) do %>
        <%= label_tag :name %><br>
        <%= text_field_tag :name %>
    <br>
        <%= label_tag :pets %><br>
        <%= check_box_tag :pets, 't' %>
    <br>
    
      <%= submit_tag("Search") %>
    <% end %>
    
    <table>
      <thead>
        <tr>
          <th>Listing name</th>
        </tr>
      </thead>
    
      <tbody>
        <% @listings.each do |listing| %>
          <tr>
            <td><%= listing.name %></td>
          </tr>
        <% end %>
      </tbody>
    </table>
    
    <br>
    
    <%= link_to 'New Listing', new_listing_path %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 2015-10-12
      • 2013-09-30
      • 2018-09-14
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多