2012-03-08 17 views
2

由於當前應用程序的靈活性有限,我正在關閉acts_as_taggable_on。相反,我從頭開始構建自己的標籤作爲自己的模型。不過,我已經錯過了表單的「@ model.tag_list」方法,它會分割逗號分隔的用戶輸入並製作單個標籤。我的「可標記」模型是一個視頻,我很好奇如何編寫一個本質上可以像「tag_list」一樣的方法?如何接受以逗號分隔的列表爲模型構建標籤?

例子:

<%= form_for @video do %> 
    <%= f.text_field :tag_list %> 
    .... 

給定輸入:"one, two, three" 將建立三個標籤作爲@video的孩子。

@video.tags.each do |tag| 
    puts tag.name 
end 

=> one 
two 
three 

編輯

我真的很喜歡這個在Tag模型,以保持形狀塞滿我的控制器。也許作爲一個自定義屬性?也許視頻模型會更有意義?我知道如何自定義方法來返回自定義數據,但不分配它。一些研究指出我這樣(沒有測試)

video.rb

def tag_list=value 
    value.split(',').each do |tag| 
    self.tags.build(:name => tag).save 
    end 
end 

回答

2

這似乎是我的示例代碼中結束了工作

video.rb

def tag_list=value 
    value.split(',').each do |tag| 
    self.tags.build(:name => tag).save 
    end 
end 

編輯

還需要添加得到它的形式工作:

def tag_list 
    self.tags.join(',') 
end 
+0

這對我沒用 - 當我發佈表單時,我得到「標記無效」錯誤。你能發佈你的完整代碼嗎?謝謝。 – Anand 2016-03-16 12:07:05

+0

@Anand是4年前的......但是這聽起來像是你對'tag'的驗證沒有被滿足。 – 2016-03-16 16:54:21

0

你可以離開tag_list作爲視頻的屬性,然後在創建你可以只是有類似:

def create 
    @video = Video.new(params[:video]) 
    if @video.save 
    params[:video][:tag_list].split(',').each do |tag| 
     @video.tags.create_by_name(tag) 
    end 
    else 
    render :new 
    end 
end 
+0

啊,但有以移動出模型的方法嗎?我想讓我的控制器保持不變。特別是因爲我也計劃有其他類型的標籤。所以會有tag_list,actor_list,director_list等...... – 2012-03-08 01:51:46

相關問題