首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在对象的属性路径上触发基于对象存在的条件?

如何在对象的属性路径上触发基于对象存在的条件?
EN

Stack Overflow用户
提问于 2016-09-08 14:53:11
回答 2查看 42关注 0票数 0

挑战属于以下5种分类之一:

代码语言:javascript
复制
  CATEGORIZATION = ['adventure', 'health', 'work', 'gift', 'wacky']
  scope :adventure,  -> { where(categorization: 'adventure') }
  scope :health,  -> { where(categorization: 'health') }
  scope :work,  -> { where(categorization: 'work') }
  scope :gift,  -> { where(categorization: 'gift') }
  scope :wacky,  -> { where(categorization: 'wacky') }

例如,如果用户单击...

代码语言:javascript
复制
<% if challenge.categorization == "work" %>
  <%= link_to categorization_path(categorization: :work) do %>    
    <span class="glyphicon glyphicon-briefcase"></span>
  <% end %>
<% elsif challenge.categorization == "gift" %> etc...

他被带到..。

路由:http://www.livetochallenge.com/categorization?categorization=work

这个页面将列出他的所有挑战,并将其归类为:work

代码语言:javascript
复制
@challenges = current_user.challenges.send(params[:categorization]).order("deadline ASC").select{ |challenge| challenge }
@challenges_by_date = (@challenges).group_by { |t| [t.deadline.year, t.deadline.month] }

但是如果用户对分类没有任何挑战:work,那么我如何使用条件来触发页面上的文本,"You have no challenges for this category"?

我试过了..。

代码语言:javascript
复制
<% if @challenges.categorization.nil? %>
  You have no challenges for this category.
<% end %>

但是我得到了错误undefined method .categorization' for #<Array:0x007fe6bfdeaed8>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-08 15:00:11

你有没有尝试:

代码语言:javascript
复制
<% if @challenges.none?{ |challenge| challenge.categorization } %>
  You have no challenges for this category.
<% end %>

更好的解决方案:

代码语言:javascript
复制
# assuming that the foreign key is categorization_id
@challenges.any?(&:categorization_id)
票数 1
EN

Stack Overflow用户

发布于 2016-09-08 15:00:03

看看这个:

代码语言:javascript
复制
if @challenges.none? { |c| c.categorization }

附注:

你可以缩短你的scope的定义:

代码语言:javascript
复制
  CATEGORIZATION = %w(adventure health work gift wacky).freeze
  CATEGORIZATION.each do |categorization|
    scope categorization.to_sym, -> { where(categorization: categorization) }
  end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39384362

复制
相关文章

相似问题

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