我是rails的新手--任何帮助都会很感激。我想知道如何实现rails内置的函数".uniq“-
问:如何使用户A的名称&用户B的名称只出现一次(使用rails内置方法".uniq"),尽管这两个用户已经创建了多个事件。除了rails函数之外,我还可以接受任何其他建议。-非常感谢
我把我所有的代码放在下面:
浏览:app/view/user/index.html.erb
<% @event.each do |event| %>
<%= event.user.full_name %>
<% end %>
模型: user.rb & event.rb
class User < ActiveRecord::Base
has_many :events, dependent: :destroy
end
class Event < ActiveRecord::Base
belongs_to :user
end
控制器: user_controller.rb
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
发布于 2014-09-10 21:10:03
在:
def index
@users = User.all
@event = Event.all
end
将@event = Event.all
更改为:
@event = Event.all.to_a.uniq { |e| e.user.full_name }
这回答了您的具体问题,但您仍在将所有事件和所有相关用户加载到这些事件中,只是显示了一个名称列表。
我会尝试这样的方法:
def index
@users = User.all
@users_with_events = User.joins(:events).uniq
end
应该将@users_with_events
简化为具有事件关系的一组用户。
发布于 2014-09-10 21:03:49
两种方法。可以根据用户对@event
数组进行分组。
<% @event.group_by(&:user).each do |user, events| %>
<%= user.full_name %>
<% end %>
或者,使用@user数组
<% @user.each do |user| %>
<%if user.events.count > 0%>
<%= user.full_name %>
<%end%>
<% end %>
https://stackoverflow.com/questions/25774908
复制相似问题