2017-05-28 33 views
0

型號:爲什麼當我傳入一個變量時,我的連接/查找失敗?

# committee.rb 
has_and_belongs_to_many :chambers 

# chamber.rb 
has_and_belongs_to_many :committees 

我試圖執行以下查找(在rake任務,如果該事項):

lookup = Committee.joins(:chambers) 
      .where(chambers: { id: chamber.id }) 
      .where(name: clean_name) 
      .first 

時遇到的問題與clean_name末。當我手動放置name: "Judiciary"時,查找會按預期成功。但是,當「司法」被傳入clean_name時,查找返回nil。我也試過name: "#{clean_name}",但無濟於事。

這裏是clean_name如何被生成:

# scheduler.rake 
# "committee" is previously-defined via an API lookup 
clean_name = Committee.gsub_name(committee) 

# committee.rb 
# I have to sanitize the API-returned name in order to make 
    it consistent with my own naming convention 
def self.gsub_name(name) 
    return name.gsub("Committee on the ", "").gsub("Committee on ", "").gsub("'", "'").gsub("House ", "").gsub("Senate ", "").gsub("Committee", "") 
end 

我已經證實,在執行查找之前相應的文本gsub_name的回報。

這裏是全功能scheduler.rake

def add_committee_for(bill, chamber) 
    params = [ 
    :level => "#{chamber.government.level}", 
    :endpoint => "bill_committee", 
    :api_url => bill.api_url 
    ] 

    # Retrieve original unsuanitized value from API: 
    committee = Bill.set_request(params) 

    clean_name = Committee.gsub_name(committee) 
    chamber_committees = chamber.committees 
    yn_committee = Committee 
    .joins(:chambers) 
    .where(chambers: { id: chamber.id }) 
    .where(name: "#{clean_name.to_s}") 
    .first 
end 
+0

您確定字符串中沒有前導或尾隨空格嗎?你可以調用'clean_name.strip'來檢查,它會消除空白。 – Iceman

+0

@Iceman我以爲我用我的gsubs解決了這個問題,但是......你釘了它。我會盡快接受您的答案。非常感謝! –

回答

1

正如它竟然是因爲在字符串中的空白的意見解決。解決方案是使用String#strip方法來擺脫這一點。

lookup = Committee.joins(:chambers) 
     .where(chambers: { id: chamber.id }) 
     .where(name: clean_name.strip) 
     .first 
相關問題