我目前使用Spotify的API來收集藝術家圖像,並且正如預期的那樣工作。在Rails中提供一個基於布爾值的回退圖像URL
require 'rspotify'
class Artist < ActiveRecord::Base
attr_accessor: :image
before_save :get_image
def get_image
artist = RSpotify::Artist.search(self.name).first
if artist.nil?
self.image = '[email protected]'
else
self.image = artist.images.first
self.image = image['url']
end
end
end
我擔心的是,有很多時候,其中一個藝術家共享相同的名稱一個是少爲人知引起有點查詢股價的。例如,如果我的網站上有一位名爲「John Doe」的藝術家,而Spotify也有一位具有相同名字的藝術家,但是是完全不同的人,則會顯示錯誤的人的圖像。
要解決這個問題,我想在我的編輯表單中添加一個複選框,詢問「正確的藝術家圖像?」。如果爲false,則從我的公共目錄中使用默認頭像。我現在唯一的問題是我的藝術家模型中的before_save
回調無論如何都使用Spotify的圖像。有沒有一種方法可以在我的窗體的編輯視圖中設置一些東西,從某種意義上講,可以覆蓋此回調並根據我的複選框的值使用此回退URL?
<%= simple_form_for @artist do |f| %>
<div class="input">
<%= f.input :name %>
</div>
<%= image_tag @artist.image %>
<%= label_tag 'Correct Artist Image?' %>
<%= check_box_tag 'Correct Artist Image?' %>
<%= f.submit %>
<% end>
顯示視圖
<% if correct_image %>
<%= image_tag @artist.image %>
<% else %>
<%= image_tag '[email protected]' %>
<% end %>
我唯一的問題乍看之下就在'assign_image'方法的第一行。 「@ is_correct_image」應該是一個實例變量嗎?我發現它引用了複選框的值,但我只是想了解它是如何實現的。它跳過我的原因之一是因爲我很習慣表示模型與屬性實例的變量。 – 2014-11-25 03:26:33
是的,它的意思是一個實例變量而不是一個ActiveRecord屬性,因爲該值實際上並未保存到數據庫中。 'attr_accessor'允許'@ is_correct_image'到'Artist.new()'中的集合(以及AR屬性),這是'params'哈希設置'@ is_correct_image'的可能方式。 – Pete 2014-11-25 05:43:36
有沒有辦法讓複選框在提交編輯表單後保持選中/取消選中狀態?這似乎是唯一不起作用的 – 2014-11-25 14:28:05