【问题标题】:Writing a method query to display specific list of users - Rails 5编写方法查询以显示特定用户列表 - Rails 5
【发布时间】:2017-05-04 16:08:40
【问题描述】:

我不确定如何编写以下方法,非常感谢您的帮助。我想做的是:

  • 如果用户声明他们是男性 (category_gender_id = 1) 并且他们正在寻找女性 (user.preference.category_matchseeking_id = 2) 我想显示所有女性成员 category_gender_id = 2
  • category_gender_id = 1[男]
  • category_gender_id = 2[女]
  • category_matchseeking_id = 1[男]
  • category_matchseeking_id = 2[女]
  • 问题:谁能告诉我如何正确编写preference_list 方法以使其正确显示在视图(users/index.html.erb)中,以显示当前用户为女性的用户是男性还是反之亦然? - 尝试了以下方法,但似乎不起作用

型号

user.rb
  belongs_to :category_gender
  has_one :preference

  def self.preference_list
    users = User.all
    users.each do |user|
      if user.preference.category_matchseeking.name == "Male"
        #display users that are female
        users.joins(:category_gender).where('category_genders.name' => "Female")
      else user.preference.category_matchseeking.name == "Female"
        #display users that are male
        users.joins(:category_gender).where('category_genders.name' => "Male")
      end
    end
  end

--

Preference.rb
belongs_to :user
belongs_to :category_matchseeking

--

CategoryGender.rb
has_many :users

--

CategoryMatchseeking.rb
has_many :preferences

查看 [users/index.html.erb]

 <table>
    <thead>
      <tr>
        <th>Firstname</th>
        <th>Lastname</th>
        <td>gender</td>
        <th>email</th>
        <th>stats</th>
      </tr>
    </thead>
    <tbody>
      <% @users.preference_list.each do |user| %>
        <tr>
          <td><%= link_to user.firstname, user %></td>
          <td><%= link_to user.lastname, user %></td>
          <td><%= user.category_gender.name%></td>
          <td><%= user.email %></td>
          <td>-</td>
        </tr>
      <% end %>
    </tbody>
  </table>

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    尝试将您的else 语句指定为elsif

    if user.preference.category_matchseeking.name == "Male"
      #display users that are female
      users.joins(:category_gender).where('category_genders.name' => "Female")
    elsif user.preference.category_matchseeking.name == "Female"
      #display users that are male
      users.joins(:category_gender).where('category_genders.name' => "Male")
    end
    

    这个else user.preference.category_matchseeking.name == "Female" 将被解释为是否相等。

    您的self.preference_list 可以用作ApplicationHelper 中的辅助方法或模型辅助方法:

    def preference_list
      users = User.all
      ...
    end
    

    然后在你的视图中使用就像&lt;%= preference_list %&gt;

    我还认为您可以将where 语句用作where('category_genders.name = Female'),而不是=&gt;

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解你的问题,但我相信你正在寻找这样的东西。 假设你有一个 current_user 方法来获取当前用户

      def preference_list
         @users = Users.where(category_gender_id: 
         current_user.category_matchseeking_id, category_matchseeking_id: 
         current_user.category_gender_id)
      end
      

      此方法将找到所有正在寻找您的gender_id并且是您正在寻找的gender_id的用户。

      【讨论】:

        猜你喜欢
        • 2020-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多