所以,我的应用程序非常简单,有一个不同类别的下拉选择菜单。每个类别都有一组食谱。因此,如果您在选择中点击意大利语,我想显示一系列意大利食谱。
使用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
答案 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 %>
希望这有帮助!