如何在Rails

时间:2016-02-07 23:22:30

标签: ruby-on-rails bootstrap-modal

我是Rails的新手,我正在为“tasklist”(待办事项列表)开发一个简单的应用程序。

在我的应用中,我想根据不同类别的类别对任务进行分类(购物,待办事项 - 用户可以创建自己的类别)。因此,我为UserCategoryTask创建了单独的模型,每个Task与一个category相关联。

在我看来(users/show.html.erb -n这边我为categorytask呈现视图),我列出了左侧的所有类别和右侧的所有打开任务。我想将类别设为LINKS,因此当用户选择一个类别时,只有链接到该类别类型的任务才会显示在右侧。

我理解正常的link_to在进入新页面时的工作原理。我也理解按钮在bootstrap中是如何工作的。但是我无法确定如何将类别选择传递给控制器​​,因此我只能将类别匹配的任务与用户选择的任务相匹配。

感谢您的帮助。

3 个答案:

答案 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”列表以适应。