如何选择一个选项并显示结果?

时间:2014-11-18 23:12:35

标签: ruby-on-rails ruby ruby-on-rails-4

所以,我的应用程序非常简单,有一个不同类别的下拉选择菜单。每个类别都有一组食谱。因此,如果您在选择中点击意大利语,我想显示一系列意大利食谱。

使用Active Admin创建类别和食谱。

前端选择菜单如下所示:

<select class="styled email-input">
    <% @category.each do |category| %>
      <option><%= category.name %></option>
    <% end %>
    </select>

该类别属于食谱,而食谱有许多类别。

所有内容都显示在着陆#index页面landing_controller.rb:

class LandingController < ApplicationController
  def index
    @category = Category.all
  end
end

再次,当用户点击某个类别时,我该如何在视图中显示与该类别相关的食谱?

更新错误:

PG::UndefinedColumn: ERROR:  column recipes.category_id does not exist
LINE 1: SELECT "recipes".* FROM "recipes"  WHERE "recipes"."category_id...
                                               ^
: SELECT "recipes".* FROM "recipes"  WHERE "recipes"."category_id" = '2'

更新2个型号:

Recipe.rb

class Recipe < ActiveRecord::Base
  has_many :categories
  belongs_to :category

  validates :title, presence: true

end

Category.rb

class Category < ActiveRecord::Base
  belongs_to :recipe
end

1 个答案:

答案 0 :(得分:1)

如果你想在视图中显示它而不重新加载页面,你需要为它编写javascript。否则,您将所选选项作为参数传递给索引操作并重新加载整个页面(我正在假设一些事情,例如具有name属性的类别模型):

class LandingController < ApplicationController
  def index
    @category = Category.all
    @recipes = Recipes.where(category_id: params[:category_id]) if params[:category_id].present?
  end
end

然后您的观点可能是这样的:

<%= form_tag landing_index_path, method: 'get' do %>
  <%= select_tag "category_id", options_for_select(@category.map{ |category| [category.name, category.id] }, selected: params["category_id"])) %>
  <%= submit_tag "Submit" %>
<% end %>

也许在它下面你可以显示相关的食谱,如:

<% if @recipes %>
  <% @recipes.each do ...%>
    ...
  <% end %>
<% end %>

希望这有帮助!