首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过迭代-内置函数.uniq防止重复[rails4]

通过迭代-内置函数.uniq防止重复[rails4]
EN

Stack Overflow用户
提问于 2014-09-10 20:53:51
回答 2查看 44关注 0票数 0

我是rails的新手--任何帮助都会很感激。我想知道如何实现rails内置的函数".uniq“-

  1. 我只想在我的index.html.erb页面中显示活动组织者--也就是说,我只想只显示那些创建了事件的用户。
  2. 用户A创建了2个事件,用户B创建了14个事件,用户C创建了0个事件
  3. 当我迭代@events并调用event.user.full_name时,用户A的名称出现了2次,用户B的名称出现了14次,而用户C的名称没有出现

问:如何使用户A的名称&用户B的名称只出现一次(使用rails内置方法".uniq"),尽管这两个用户已经创建了多个事件。除了rails函数之外,我还可以接受任何其他建议。-非常感谢

我把我所有的代码放在下面:

浏览:app/view/user/index.html.erb

代码语言:javascript
运行
复制
<% @event.each do |event| %>
    <%= event.user.full_name %>
<% end %>

模型: user.rb & event.rb

代码语言:javascript
运行
复制
class User < ActiveRecord::Base
  has_many :events, dependent: :destroy
end

class Event < ActiveRecord::Base
  belongs_to :user
end

控制器: user_controller.rb

代码语言:javascript
运行
复制
class UsersController < ApplicationController
  before_action :set_user, only: [:show]
  before_filter :authenticate_user!

  # GET /users
  # GET /users.json
  def index
    @users = User.all
    @event = Event.all
  end

  # GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])
    @events = @user.events.order(:date)
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:email, :password, :password_confirmation, :firstname, :lastname, :dob, :gender, :description, :role)
    end
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-10 21:10:03

在:

代码语言:javascript
运行
复制
def index
  @users = User.all
  @event = Event.all
end

@event = Event.all更改为:

代码语言:javascript
运行
复制
@event = Event.all.to_a.uniq { |e| e.user.full_name }

这回答了您的具体问题,但您仍在将所有事件和所有相关用户加载到这些事件中,只是显示了一个名称列表。

我会尝试这样的方法:

代码语言:javascript
运行
复制
def index
  @users = User.all
  @users_with_events = User.joins(:events).uniq
end

应该将@users_with_events简化为具有事件关系的一组用户。

票数 1
EN

Stack Overflow用户

发布于 2014-09-10 21:03:49

两种方法。可以根据用户对@event数组进行分组。

代码语言:javascript
运行
复制
<% @event.group_by(&:user).each do |user, events| %>
    <%= user.full_name %>
<% end %>

或者,使用@user数组

代码语言:javascript
运行
复制
<% @user.each do |user| %>
    <%if user.events.count > 0%>
       <%= user.full_name %>
    <%end%>
<% end %>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25774908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档