我是Rails的新手,我正在为“tasklist”(待办事项列表)开发一个简单的应用程序。
在我的应用中,我想根据不同类别的类别对任务进行分类(购物,待办事项 - 用户可以创建自己的类别)。因此,我为User
,Category
和Task
创建了单独的模型,每个Task
与一个category
相关联。
在我看来(users/show.html.erb
-n这边我为category
和task
呈现视图),我列出了左侧的所有类别和右侧的所有打开任务。我想将类别设为LINKS,因此当用户选择一个类别时,只有链接到该类别类型的任务才会显示在右侧。
我理解正常的link_to在进入新页面时的工作原理。我也理解按钮在bootstrap中是如何工作的。但是我无法确定如何将类别选择传递给控制器,因此我只能将类别匹配的任务与用户选择的任务相匹配。
感谢您的帮助。
答案 0 :(得分:0)
您可以像category
这样传递link_to
:
link_to "Task for test_category", task_path(category: "test_category")
然后,您可以使用控制器内的params[:category]
获取类别,并根据需要使用它。
答案 1 :(得分:0)
可能是你应该创建一个新路由而不是传递参数。
resources(:categories) do
member do
get(:linked_tasks)
end
end
在类别控制器中
def linked_tasks
category = Category.find(params[:id])
tasks = category.tasks.where(is_linked: true)
end
希望这会对你有所帮助。
答案 2 :(得分:0)
您需要将Javascript
参数传递给某种评估函数,过滤相应的类别。这可以通过Rails
或<% Category.all.each do |category| %>
<%= link_to category.name, users_path(user, category: category.id) %>
<% end %>
:
<强>滑轨强>
category
这会将users#show
参数传递给您的def show
@user = User.find params[:id]
@categories = @user.categories
@categories = @categories.where(category: params[:category]) if params[:category]
end
操作:
#app/assets/javascripts/application.js
$(document).on("click", "a.category", function(e){
var id = $(this).data("category_id");
$(".todos a").not("[data-category_id=\"" + id + \""]").hide();
});
#app/views/users/show.html.erb
<% Category.all.each do |category| %>
<%= link_to category.name, users_path(user, category: category.id), class: "category", data: { category_id: category.id } %>
<% end %>
<div class="todos">
<% @user.todos.each do |todo| %>
<%= link_to todo.title, todo, data: { category_id: todo.category_id } %>
<% end %>
</div>
<强>的Javascript 强>
如果你想成为探索者,你只想使用JS来保持你的功能只在这个视图上:
{{1}}
这将允许您单击“类别”并更改“todos”列表以适应。