2014-11-06 27 views
0

我創建了一個新的rails項目並生成了一些腳手架。rails提交複選框的附加參數來創建動作

對於這個問題,我將談談兩種型號/實體/類:

Model_A 
Model_B 

我使用支架時談論Rails項目的一個新的設置,並自動生成的代碼。

Model_AModel_B之間的關係是:Model_A有很多Model_B S和Model_B屬於Model_A

我想在Model_Anew.html.erb編輯新的表格。在瀏覽器中調用/Model_As時,會顯示錶單。我更新了表單,因此它向我顯示了之前創建的每個對象Model_B的列表。每行包含一個check_box,這裏是我的問題:

當我打電話/Model_As我想創建一個新的對象Model_AModel_A有很多Model_B所以它會很高興檢查一些列出Model_B對象,當我按提交Model_A對象將被創建與檢查Model_B對象的引用。聽起來不那麼棘手,但我解決不了。

如何修改Model_A控制器?我必須添加路線嗎?我的表單代碼看起來如何?

我知道form_helper 但沒有運氣呢。

其他我得到必要的params(檢查對象的ID的數組),但Model_A對象沒有得到創建。或者該對象正在創建,但未提交id。

我認爲這對經驗豐富的ruby/rails開發人員來說不成問題。我對這個東西很陌生。

謝謝!

+2

當你顯示源代碼時,它確實有幫助。要想象你在做什麼比想象中的最小例子要難得多。 – 2014-11-06 23:49:35

回答

0

您必須主要在兩個文件中進行更改。

  1. controllers/model_as_controller.rb - 在new行動

    def new 
        @model_a = Model_A.new 
        @model_bs = Model_B.all 
    end 
    
  2. views/model_as/new.html.erb - 在形式新@model_a

    <%= form_for ... %> 
        ... 
    
        <%= hidden_field_tag :model_bs %> 
        <% @model_bs.each do |model_b| %> 
        <%= check_box_tag "model_bs[]", model_b.id %> 
        <%= label_tag("model_b_#{model_b.id}", model_b.name) %> 
        <% end %> 
    
        ... 
    <% end %> 
    
  3. controllers/model_as_controller.rb - 的create行動。 提交了new.html.erb表單後,應用程序將被路由到此創建操作。 檢查的model_bs列表將以逗號分隔的Model_B對象的ID字符串形式出現。 格式將是 - 「1,4,7」。所以你寫下面的代碼來解壓縮到IDS

    def create 
        model_bs = Model_B.find(params[:model_bs]) 
    
        ... # the code to create the @model_a object and save it 
        ... 
    
        @model_a.model_bs << model_bs # This will set the model_a id in all the model_b objects 
        @model_a.save! 
    
        ... #code to redirect on success or render 'new' on failure 
    end 
    

確保沒有在Model_bs表中的字段model_a_id並寫入適當的模型has_many :model_bsbelongs_to :model_a線的陣列。

+0

你好,非常感謝你的回答,但它不起作用。 Model_A正在創建並且轉發工作正常,但是當我想看到結果爲空時。我修改了Model_A的show.html.erb以列出所有的@ model_a.exercises,但它是空的。 沒有JavaScript沒有辦法做到這一點?沒有Ruby/Rails方式? – 2014-11-07 13:07:19

+0

嘗試編輯的代碼。我從視圖中刪除了所有的javascript。 – 2014-11-07 13:22:58

+0

現在,我在提交表單(內部服務器錯誤)時得到了「期望的數組(獲得字符串)param'model_bs'」。 – 2014-11-07 21:10:26