Ruby on Rails-节省用户输入问题



我一直在尝试允许用户输入活动名称,然后将其保存到数据库中。但是,我遇到了多个问题

第一个是以下内容:

ActionController :: Activity Controller中的参数#创建

及其所指的行是以下内容:

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

我已经看过一些解决方案,据我了解,它源于该行的" require(::活动)"部分。我不明白的是为什么要拥有该特定行会导致错误。

删除" .remove(:Active)"将修复它,但我遇到了另一个问题,当我输入名称然后单击"创建"按钮时,它认为我没有名称并抛出验证错误。

验证失败:名称不能为空白,名称太短(最小值) 是1个字符)

及其所指的线:

如果 @acvision.save!

这使我相信" form_for"的代码是不正确的,并且不会将文本字段中的内容视为名称的输入。我仍然是HTML和Ruby在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所说,我的错误是认为参数是"活动[a_name]",而不是"活动[a_name]"。

更改

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

to

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

修复了第一个错误,随后允许我保存用户输入。感谢您的帮助最大

最新更新