Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如果条件为真,则显示文本_Ruby On Rails_Ruby_If Statement - Fatal编程技术网

Ruby on rails 如果条件为真,则显示文本

Ruby on rails 如果条件为真,则显示文本,ruby-on-rails,ruby,if-statement,Ruby On Rails,Ruby,If Statement,我试图让文本“Tags:”仅在标记存在时显示,因此我在视图中执行了以下操作: <% if @tags.present? %> <%= puts "Tags:"%> <% end %> 我正试图这样做,当一篇文章有标签时,标签列表前面会出现“标签:”一词,而当一篇文章没有任何标签时,标签列表前面不会出现“标签:”一词 现在只会导致“标签:”出现在每篇文章上 @tags被定义为什么?您想在哪里检查它是否存在 你想要如果@tags.nil?什

我试图让文本“Tags:”仅在标记存在时显示,因此我在视图中执行了以下操作:

<% if @tags.present? %>  
    <%= puts "Tags:"%> 
    <% end %>
我正试图这样做,当一篇文章有标签时,标签列表前面会出现“标签:”一词,而当一篇文章没有任何标签时,标签列表前面不会出现“标签:”一词


现在
只会导致“标签:”出现在每篇文章上

@tags被定义为什么?您想在哪里检查它是否存在


你想要
如果@tags.nil?

什么是@tags的定义?您想在哪里检查它是否存在


是否希望
如果@tags.nil?

在视图中不使用puts——puts会将文本转到控制台。这将解决它:

<% if @tags.present? %>  
    <%= "Tags:"%> 
<% end %>
这是假设您有一行类似于:

has_many :article_tags
has_many :tags, through: :article_tags
我假设你是根据你的二传手做的

我假设这是一种多对多的关系,但看起来您使用的是has\u many:通过,而不是has\u和属于多。这有什么原因吗?如果您使用的是has\u和\u属于\u many,您应该能够做到这一点:

has_and_belongs_to_many :tags

def tag_tokens=(tags_delimited)
  self.tags = []
  tags_delimited.split(",").each do |string|
    self.tags << Tag.find_or_create_by_name(name: string)
  end
end
具有多个标记,并且属于多个标记
def tag_标记=(标记_分隔)
self.tags=[]
标记以U分隔。拆分(“,”)。每个do字符串|

self.tags在视图中不使用puts——puts会将文本转到控制台。这将解决它:

<% if @tags.present? %>  
    <%= "Tags:"%> 
<% end %>
这是假设您有一行类似于:

has_many :article_tags
has_many :tags, through: :article_tags
我假设你是根据你的二传手做的

我假设这是一种多对多的关系,但看起来您使用的是has\u many:通过,而不是has\u和属于多。这有什么原因吗?如果您使用的是has\u和\u属于\u many,您应该能够做到这一点:

has_and_belongs_to_many :tags

def tag_tokens=(tags_delimited)
  self.tags = []
  tags_delimited.split(",").each do |string|
    self.tags << Tag.find_or_create_by_name(name: string)
  end
end
具有多个标记,并且属于多个标记
def tag_标记=(标记_分隔)
self.tags=[]
标记以U分隔。拆分(“,”)。每个do字符串|

self.tags通过sgrif检查答案,它包含了很多优点。回答您的主要问题:

在erb(Rails中用于视图模板的“语言”)中,您可以使用
将一些Ruby代码的结果插入到视图模板中

当您正在执行以下操作时:

<%= puts "Tags:" %>
或者,由于您没有在Ruby中执行任何操作,您可以使用:

<% if @tags.present? %>  
  <%= "Tags:"%> 
<% end %>
<% if @tags.present? %>  
  Tags: 
<% end %>

标签:

检查sgrif的答案,它包含了很多好的观点。回答您的主要问题:

在erb(Rails中用于视图模板的“语言”)中,您可以使用
将一些Ruby代码的结果插入到视图模板中

当您正在执行以下操作时:

<%= puts "Tags:" %>
或者,由于您没有在Ruby中执行任何操作,您可以使用:

<% if @tags.present? %>  
  <%= "Tags:"%> 
<% end %>
<% if @tags.present? %>  
  Tags: 
<% end %>

标签:

我在上面的帖子中进行了扩展。顶部代码块导致“Tags:”字符串没有出现在任何帖子上。您正在控制器中设置@Tags,对吗?如果是这样的话(你应该再次使用uncler@tags.nil?而不是If@tags.present?),那么你调用来设置它的方法工作不正常,你应该看一看。另外,你关于使用@tags.nil?的评论:你需要使用uncler,而不是If。打印标签:如果未设置@Tags,这与您想要的正好相反。对不起,我不明白我必须在控制器中设置@Tags的原因。这是我的代码:我已经更新了我的答案,以尽可能地帮助你使用你提供的代码,但听起来你的关系有一个相当时髦的设置。我在上面的帖子中进行了扩展。顶部代码块导致“Tags:”字符串没有出现在任何帖子上。您正在控制器中设置@Tags,对吗?如果是这样的话(你应该再次使用uncler@tags.nil?而不是If@tags.present?),那么你调用来设置它的方法工作不正常,你应该看一看。另外,你关于使用@tags.nil?的评论:你需要使用uncler,而不是If。打印标签:如果未设置@Tags,这与您想要的正好相反。对不起,我不明白我必须在控制器中设置@Tags的原因。这是我的代码:我已经更新了我的答案,以尽我所能帮助你使用你提供的代码,但听起来你的关系有一个相当时髦的设置。