0

我試圖將這些模型關聯到創建欄的動作。協會!爲什麼那麼無?

我知道bar和type都是nil沒有創建的對象,但爲什麼ruby不明白我想要的只是綁定這些nil對象?

所以,我搜索的答案,但他們沒有解釋清楚爲什麼這個錯誤:的零名爲id,這將被錯誤地4 - 如果你真的想零的ID,請使用OBJECT_ID

發生在這種情況下。

用戶 - 型號

has_one :bar 

酒吧 - 型號

belongs_to :type 
belongs_to :user 

類型 - 型號

has_many :bars 

酒吧 - 控制器

def new 
     @bar = Bar.new 
    end 

    def create 
     @bar = current_user.build_bar(params[:bar].merge(:type_id => @type.id)) 
      if @bar.save  
      flash.now[:success] = "Wohoo!" 
      redirect_to @bar 
      else 
      render :new 
      end 
     end 

New_bar - 查看

<div class="block"> 

     <%= render 'shared/flash_messages' %> 

     <%= form_for @bar, :url => bars_path, :method => :post do |b| %> 
    <ul> 
    <li><%= b.label :name %><%= b.text_field :name %></li> 

    <%= b.fields_for :type do |t| %> 

    <li>pirate:<%= t.radio_button :style, "pirate" %></li> 
    <li>pub:<%= t.radio_button :style, "pub" %></li> 
    <li>american:<%= t.radio_button :style, "american" %></li> 
    </ul> 
    <% end %> 

    <%= b.submit "create", :class => "sec button" %> 
    <% end %> 
    </div> 
+0

順便說一句,你可能不想使用「type」作爲模型名稱。參見例如http://juicebar.wordpress.com/2007/05/30/reserved-words-in-rails/ – 2012-03-10 22:39:24

+0

woow!我從來沒有想過這個,鐵軌充滿了隱藏的技巧! – dcalixto 2012-03-10 23:02:19

回答

1

嘗試構建bar對象是這樣的:

@bar = current_user.bar.new params[:bar].merge(:type_id => @type.id) 

確保您同時擁有current_user對象和@type當你打電話給這條線的時候。

爲了記錄在案,current_user.bar.newcurrent_user.bar.build之間的唯一區別是,build添加新創建bar對象到用戶的收集保存它(其中爲new不會將對象添加到用戶,直到它實際上保存)前。

+0

感謝幫助的人!但零點瘋狂仍然活着 – dcalixto 2012-03-10 22:59:24

+0

將您的調用更改爲'@ bar.save!'(帶有感嘆號),然後在您的原始文章中追加輸出到日誌中的錯誤(可能在'log/development.log'中。需要知道它正在尋找哪個'id' – 2012-03-10 23:17:36

+0

here去吧!開始POST「/ bars」爲127.0.0.1於2012-03-10 20:28:37 -0300 BarsController處理#create as HTML 參數:{ 「utf8」=>「✓」,「authenticity_token」=>「fLI8ffLhMXWklCy7CMZWBxIvqfbBKi6Al5vo269FyYM =」,「bar」=> {「name」=>「sssss」,「type」=> {「style」=>「Pub」}} ,「提交」=>「創建」} 1 2 3 4 5 6 7 8 9 10 [0m [35m用戶負載(0.2ms)[0m SELECT「users」。* FROM「users」WHERE「users」。「auth_token」='pwXhuBLyjau1OEdaTxKuvw'LIMIT 1 [ 36mBar負載(13.5ms)[0m [1mSELECT「bars」。* FROM「bars」WHERE「bars」)。「user_id」= 11 LIMIT 1 [0m – dcalixto 2012-03-10 23:36:27

相關問題