簡體   English   中英

Ruby on Rails - 節省用戶輸入的麻煩

[英]Ruby on Rails - Saving user input troubles

我一直在嘗試允許用戶輸入活動的名稱,然后將其保存到數據庫中。 但是,我遇到了多個問題

第一個是以下內容:

ActionController :: ParametersMissing在ActivitiesController #create中

它引用的行如下:

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

我已經看了一些解決方案,根據我的理解,它源於該行的“require(:activities)”部分。 我不明白的是為什么讓那條特定的行導致錯誤。

刪除“.remove(:activities)”將修復它,但我遇到另一個問題,當我輸入一個名稱,然后單擊“創建”按鈕時,它認為我沒有名稱並拋出驗證錯誤。

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

以及它所指的線:

if @ 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>

正如Max評論的那樣,我的錯誤是認為參數是“activities [a_name]”而不是“activity [a_name]”。

更改

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

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

修復了第一個錯誤,隨后允許我保存用戶輸入。 感謝Max的幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM