2015-12-15 54 views
0

因此,我一直在牆上撞了我的頭六個小時。我已經得到這個工作,似乎有一切都完全一樣。我得到一個未經許可的參數:測試錯誤。這是我的佈局:不允許的參數接受嵌套屬性

User.rb

has_many :tests 
accepts_nested_attributes_for :tests, reject_if: :all_blank, allow_destroy: true 

Test.rb

belongs_to :user 

用戶控制器

def update 
    current_user.update_attributes(user_params) 
    redirect_to root_path 
end 

def user_params 
    params.require(:user).permit(:name, :email, :tests_attributes => [:id, :response]) 
end 

測試位指示

def show 
    @test = Test.where(:secure_id => params[:id]).first 
    @user = User.find(@test.user_id) 
end 

def test_params 
    params.require(:test).permit(:user_id, :test_name, :secure_id) 
end 

測試/ show.html.erb

<%= simple_form_for @user, :url => admin_user_path(@user) do |u| %> 
    <%= u.simple_fields_for @test do |as| %> 
    <%= as.label :response %><br> 
    <%= as.text_area :response, :class => "tinymce", :rows => 15 %><br> 
    <% end %> 

    <table> 
    <tr> 
     <td> 
     <%= u.input :field_name, :label => false, :boolean_style => :inline %> 
     </td> 
     <td>Field Name</td> 
    </tr> 
    </table> 

    <br /><br /> 

    <%= u.submit 'Update User', :class => 'btn btn-primary' %> 
    <br /><br /> 
<% end %> 

我因公司政策改變名稱和代碼省略。如果需要更多代碼,請告訴我,我會提供。

我已經過了大量的stackoverflow帖子,閱讀simple_forms嵌套屬性部分,和許多其他的東西。

+0

檢查[文檔](https://github.com/plataformatec/simple_form/wiki/Nested-Models),發現它們是如何傳入' :使用'simple_fields_for'方法時,使用「parts」而不是'@ parts'(在你的情況下用「test」替換「parts」)。我只使用Rails作爲API服務器,所以我不能說這是否會解決您的問題... –

回答

0

fields_for第一個參數必須是一個創紀錄的名字,那就是你的情況:tests(用戶的has_many:測試)。第二個參數是一個記錄對象,它將用於渲染fields_for內部的輸入。您通過@test作爲第一個參數,fields_for將此視爲記錄名稱,並添加test參數,這是您的強參數中不允許的參數。

因此,它應該是這樣的:

<%= u.simple_fields_for :tests, @test do |as| %> 
+0

因此,這樣做可以擺脫錯誤,並且它實際上處理,所以非常感謝!我現在遇到了一個問題,我的複選框值實際上並未保存到數據庫中。我沒有收到任何錯誤,但用戶參數未在控制檯中處理: '參數:{「utf8」=>「✓」,「authenticity_token」=>「Ar04oEJ3inm +/hnG8OPYIYnBYFbb4xZYzmFDyriOnSk =」,「user」=> { 「tests_attributes」=> {「0」=> {「response」=>「

  asdfasdfasfasdfasdfadf

」,「id」=>「35」}}},「commit」=>「更新用戶」,「id」= >「1」} ' 用戶也應該有複選框字段名稱。奇怪。 – Matthew

+0

@Mthethew你有沒有改變別的?似乎與用戶輸入相關的輸入不正確,他們的名字中沒有「user」。你可以在你發佈的參數中看到''id「=>」1「'在'user'哈希之外。也許你改變了'simple_form_for'的參數? – Jeiwan

+0

感謝您的回覆。這個問題其實完全是另一回事,我相信這種形式現在正在發揮作用。我們有另一個頁面來調整訪問,而且這個表單在開發中也不起作用,這很奇怪,但是我可以和我的上司合作。 感謝您的幫助,我選擇了您的答案作爲正確的答案! – Matthew