Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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 3 Rails HABTM字段用于–;检查同名记录是否已存在_Ruby On Rails 3_Tagging_Relationship_Has And Belongs To Many - Fatal编程技术网

Ruby on rails 3 Rails HABTM字段用于–;检查同名记录是否已存在

Ruby on rails 3 Rails HABTM字段用于–;检查同名记录是否已存在,ruby-on-rails-3,tagging,relationship,has-and-belongs-to-many,Ruby On Rails 3,Tagging,Relationship,Has And Belongs To Many,我在模型“片段”和“标记”之间有一个HABTM关系。目前,当我保存带有几个标记的代码段时,每个标记都会保存为新记录 现在我想检查是否已经存在同名的标记,如果是这样的话,我不需要新记录,只需要snippets_标记中的一个条目到现有记录 我该怎么做 snippet.rb: class Snippet < ActiveRecord::Base accepts_nested_attributes_for :tags, :allow_destroy => true, :reject_if

我在模型“片段”和“标记”之间有一个HABTM关系。目前,当我保存带有几个标记的代码段时,每个标记都会保存为新记录

现在我想检查是否已经存在同名的标记,如果是这样的话,我不需要新记录,只需要snippets_标记中的一个条目到现有记录

我该怎么做

snippet.rb:

class Snippet < ActiveRecord::Base
  accepts_nested_attributes_for :tags, :allow_destroy => true, :reject_if => lambda { |a| a.values.all?(&:blank?) }
  ...
end
def tag_names
  # Get all related Tags as comma-separated list
  tag_list = []
  tags.each do |tag|
    tag_list << tag.name
  end
  tag_list.join(', ')
end

def tag_names=(names)
  # Delete tag-relations
  self.tags.delete_all

  # Split comma-separated list
  names = names.split(', ')

  # Run through each tag
  names.each do |name|
    tag = Tag.find_by_name(name)

    if tag
      # If the tag already exists, create only join-model
      self.tags << tag
    else
      # New tag, save it and create join-model
      tag = self.tags.new(:name => name)
      if tag.save
        self.tags << tag
      end
    end
  end
end
classsnippettrue、:reject_if=>lambda{a | a.values.all?(&:blank?}
...
结束
_snippet.html.erb:

<% f.fields_for :tags do |tag_form| %>
  <span class="fields">
    <%= tag_form.text_field :name, :class => 'tag' %>
    <%= tag_form.hidden_field :_destroy %>
  </span>
<% end %>

'标记'%>

好吧,我不耐烦了……过了一会儿,我找到了一个适合我的解决方案。我不知道这是否是最好的方式,但我想展示一下

我不得不修改Ryan Bates Railscast的解决方案,该解决方案处理一个归属关联,以使其与HABTM一起工作

在我的代码片段表单中,有一个名为tag_names的新文本字段,它需要一个逗号分隔的标记列表

像Ryan一样,我使用虚拟属性来获取和设置标记。我认为其余的都是不言自明的,所以下面是代码

查看“\u snippet.html.erb”


模型“snippet.rb”:

def标签名称
#以逗号分隔列表的形式获取所有相关标记
标签列表=[]
标记。每个do |标记|

tag_list我也被这个问题困扰着,期望有一个答案,但是3.5年没有投票,没有最喜欢的,没有答案(除了作者本人之外)!?
def tag_names
  # Get all related Tags as comma-separated list
  tag_list = []
  tags.each do |tag|
    tag_list << tag.name
  end
  tag_list.join(', ')
end

def tag_names=(names)
  # Delete tag-relations
  self.tags.delete_all

  # Split comma-separated list
  names = names.split(', ')

  # Run through each tag
  names.each do |name|
    tag = Tag.find_by_name(name)

    if tag
      # If the tag already exists, create only join-model
      self.tags << tag
    else
      # New tag, save it and create join-model
      tag = self.tags.new(:name => name)
      if tag.save
        self.tags << tag
      end
    end
  end
end