Ruby on rails 如何将loop变量从loop传递到conroller?

Ruby on rails 如何将loop变量从loop传递到conroller?,ruby-on-rails,Ruby On Rails,好吧,也许有简单的方法可以做到这一点,但我真的不明白。在视图中,我有每个不应该存在的循环和逻辑。问题是我不知道如何在方法内部传递循环变量 - @groups.in_groups_of(2, false).each do |groups| .row -groups.each do |group| .box.col-md-5{id: "group_#{group.id}"} %h3= group.group_name - if User

好吧,也许有简单的方法可以做到这一点,但我真的不明白。在视图中,我有每个不应该存在的循环和逻辑。问题是我不知道如何在方法内部传递循环变量

 - @groups.in_groups_of(2, false).each do |groups|
  .row
   -groups.each do |group|
    .box.col-md-5{id: "group_#{group.id}"}
      %h3= group.group_name          
      - if UserGroup.where("group_id = ? AND user_id = ?", group.id, current_user.id).exists?
        %p= link_to 'Show', group
        - if current_user[:id] != group.created_by
最后,我想问一下,是否有必要将此转换为方法或帮助器

- if current_user[:id] != group.created_by

首先,确保您的用户模型中有这些行

class User
  has_many :user_groups
end
现在在控制器中,您可以编写:

@user_group_ids = current_user.user_groups.pluck(:group_id)
这样可以避免

现在在你看来

 - @groups.in_groups_of(2, false).each do |groups|
  .row
   -groups.each do |group|
    .box.col-md-5{id: "group_#{group.id}"}
      %h3= group.group_name          
      - if @user_group_ids.include?(group.id)
        %p= link_to 'Show', group
        - if current_user[:id] != group.created_by
现在对于当前用户[:id]!=创建人不需要移动到任何地方,除非您经常使用它。这是一般规则,如果您在两个以上的地方使用它,请将其放在可以重用的地方