2017-03-09 56 views
1

我一直在試圖讓用戶輸入一個活動的名稱,然後將其保存到數據庫中。但是,我遇到了多個問題Ruby on Rails - 保存用戶輸入問題

的第一個是如下:

的ActionController :: ParameterMissing在ActivitiesController#創建

而行它指的是以下:

params.require(:活動).permit(:a_name)

我看了一些解決方案,從我的理解來看,它源於該行的「require(:activities)」部分。我不明白的是,爲什麼有那條線會導致錯誤。

卸下「卸下襬臂(:活動)」將修復它,但我遇到了另一個問題,即當我輸入一個名稱,然後點擊‘創建’按鈕,就認爲我沒有名字,並拋出一個驗證錯誤。

驗證失敗:名稱不能爲空,A名稱太短(最小 爲1個字符)

和線是指:

如果@ activities.save!

這使我相信我的「form_for」代碼是不正確的,並且沒有將文本字段中的內容視爲名稱的輸入。我對HTML和Ruby on Rails仍然很陌​​生,所以任何人都可以看到我做錯了什麼?謝謝!

活動型號:

class Activity < ApplicationRecord 

    validates :a_name, presence: true, length: {minimum: 1}  
end 

活動控制器:

class ActivitiesController < ApplicationController 
    def display 
    @activities = Activity.all 
    end 

    def index 
    @activities = Activity.all 
    end 

    def show 
    end 

    def new 
    @activities = Activity.new 
    end 

    def create 
    @activities = Activity.create(activities_params) 
    if @activities.save! 
     flash[:success] = 'Activity created successfully!' 
     redirect_to activities_display_path 
    else 
     flash[:error] = 'ERROR: Activity was not saved!' 
     #render_to_string #normally would have it render to the name of view ex: :new 
    end 
    end 

    def edit 
    @activities = Activity.find(params[:id]) 
    end 

    def update 
    @activities = Activity.update(activities_params) 
    if @activities.save! 
     flash[:success] = 'Activity successfully updated!' 
     redirect_to root 
    else 
     flash[:error] = 'ERROR: Activity failed to update' 
     render_to_string 
    end 
    end 

    private 
    def activities_params 
     params.require(:activities).permit(:a_name) 
    end 

end 

活動的新HTML:

<body> 
<% flash.each do |key, value| %> 
    <div class="alert alert-<%= key %>"><%= value %></div> 
<% end %> 

<%= form_for @activities do |a| %> 
    <div class = "form-group"> 
     <div class = "row top-buffer text-center"> 
     <div class='col-md-3'> 
      <%= a.label :a_name, 'Activity Name' %>: 
      <%= a.text_field :a_name %> 
     </div> 
     </div> 

     <div class ="row top-buffer text-center"> 
     <div class="col-md-3"> 
      <%= a.submit 'Create', class: 'btn btn-primary'%> 
     </div> 
     </div> 
    </div> 
<% end %> 

</body> 
+0

您可以檢查表單實際傳遞的參數嗎?您可以使用瀏覽器的開發工具或Rails日誌來獲取請求。我懷疑這個參數是'activity [a_name]',而不是'activities [a_name]'。在這種情況下,你需要改變params方法來使用'require(:activity)'。 – Max

+0

@Max你是對的。我認爲我的表單傳遞的參數是「activity [a_name]」,而不是「activities [a_name]」。非常感謝你的解決。 – VectorConvoy

回答

0

正如馬克斯評論,我的錯誤是想參數是「活動[a_name ]「而不是」活動[a_name]「。

更改

params.require(:activities).permit(:a_name) 

params.require(:activity).permit(:a_name) 

固定第一誤差,並隨後讓我保存的用戶輸入。感謝您的幫助Max