2015-06-14 76 views
3

我已經貨幣化Rails 4創業板的兩個模型我的Rails 4應用程序。Money Rails Gem - null values

一個被稱爲參與者,另一個被稱爲資助。這些模型中的每一個嵌套在另一個稱爲Scope的模型中。範圍屬於項目。

該協會是:

項目有一個範圍;範圍屬於項目 範圍有一個參與者並且有一個資助;參與者和資金中的每一個都屬於範圍。

項目接受Scope的嵌套屬性。範圍接受參與者和資助的嵌套屬性。

參與者和資金中每個相關屬性的參數都可以在範圍和項目控制器以及模型本身中使用。 Scope和Project控制器允許範圍參數。

在我的項目表格中,我問了幾個問題。該表格也爲每個屬於它的模型嵌套了表格。在範圍表格中,我問用戶兩個布爾問題,是:你想參與者?你想要資金嗎?這些模型中的每一個都有關於參與成本和資金的後續問題(這些屬性是貨幣化的)。

如果這些問題的答案是真實的,那麼我會透露參與者或資金形式的部分內容,並詢問他們想要多少錢。

我有兩個問題:

第一個問題:非空違反 1.如果用戶說,他們確實想參加,但目前還沒有相關的成本,從而使參與者模型中的布爾問題,詢問是否有成本是參與參與,我得到一個錯誤,指出:

ERROR: null value in column "participation_cost_pennies" violates not-null constraint 
  • 如果用戶說他們不想參加在回答的範圍形式提出的問題,我得到了與上面1中相同的錯誤
  • 第二個問題:如果我在貨幣化的字段中保存金額,然後回來編輯項目表單,表單不會在貨幣化字段中顯示保存的金額 - 如果您沒有重新進入,我會得到一個錯誤說它不能爲空。

    有誰知道如何:

    1. 做出的第一個問題走開除了那些任何情況下,當參與成本實際尋找;和

    2. 通過顯示當您回來編輯表單時保存的原始金額來修復第二個問題?我試過插入:選入我的表單元素,但它沒有做任何事情。

    我的代碼如下:

    在我的範圍表格(嵌套我的項目表單內):

    <%= f.simple_fields_for :scope do |s_all| %> 
    
          <%= s_all.input :if_participant, :as => :boolean, :label => false, inline_label: 'Public participants or volunteers' %> 
          <%= s_all.input :if_funding, :as => :boolean, :label => false, inline_label: 'Funding or expenses' %> 
    

    如果回答這些字段是真的,那麼我露出部分資金參與者的表格(以實際情況爲準)。

    裏面我參加部分的形式,我有:

    <%= f.simple_fields_for :scope do |participants_s| %> 
         <%= participants_s.simple_fields_for :participant do |par| %> 
          <%= f.label 'Are participants reimbursed for their costs?', :class => 'question-project' %> 
           <%= par.collection_radio_buttons :costs, [[true, ' Yes'], [false, ' No']], :first, :last, {:item_wrapper_class => 'fixradio'}, {:class => "response-project"} %> 
           <%= f.label 'What amount will you pay for participation costs?', :class => 'question-project' %> 
         <%= par.select :participation_cost_currency, 
               options_for_select(major_currencies(Money::Currency.table)), selected: :participation_cost_currency, 
               label: false, 
               prompt: "Select your costs currency" %> 
    
           <%= par.input :participation_cost, label: false, placeholder: 'Whole numbers only', selected: :participation_cost_pennies, :input_html => {:style => 'width: 250px; margin-top: 20px', class: 'response-project'} %> 
    

    回答

    0

    Rails的聚會小組幫助我回答了這個問題。答案並不明顯 - 尤其對新人來說。

    我的問題是我在我的數據庫中有一個屬性名爲participation_cost。然後Monetise試着製作一個名字相同的方法,因爲我的表中的屬性而失敗了。對於其他人而言,您不需要數據庫中的屬性以及想要貨幣化的字段的名稱。

    刪除該屬性(在我的情況下,participation_cost)解決了我的問題。

    0

    對於第一個問題,你要在一個遷移participation_cost_cents列設置默認值:

    # in console 
    > rails g migration change_default_for_participation_cost_cents 
    
    # in migration file 
    class ChangeDefaultForParticipationCostCents < ActiveRecord::Migration 
    
        def change 
        change_column :participants, :participation_cost_cents, :integer, default: 0 
        end 
    
    end 
    

    我但我不確定我是否會繼續解決第二個問題。也許你應該把問題分成兩部分?

    +0

    嗨乍得,謝謝你的嘗試。此字段的模式中已經有默認值0。恐怕這不是解決這個問題的辦法 – Mel

    +0

    另外,當用戶說他們不需要創建成本時,我不明白這是如何解決問題的 – Mel