“지금 제출하세요!”에 대한 정의되지 않은 메소드 `permit'":끈.내가 어디로 잘못 가고 있습니까?

StackOverflow https://stackoverflow.com//questions/23034953

문제

나는 이 문제를 해결하기 위해 미친 듯이 노력해 왔습니다 permit 다른 StackOverflow 게시물 중 일부를 사용하면 오류가 발생하지만 이를 지나칠 수 없는 것 같습니다.프로젝트 모델 및 컨트롤러와 버전 모델 및 컨트롤러가 있습니다. Projects/##/versions/new 프로젝트 ID ##의 새 버전을 생성하기 위한 양식 페이지입니다.하지만 버전을 생성하기 위해 제출 버튼을 클릭하면...다음 오류가 발생합니다. VersionsController:

undefined method `permit' for "Submit Now! ":String

Extracted source (around line #36):
34
35
36
37
38


    def version_params
      params.require(:version).permit(:title)
    end
end

모든 도움을 주시면 대단히 감사하겠습니다. 저는 이 문제를 해결하려고 너무 오랫동안 노력해 왔습니다.내 코드는 다음과 같습니다.

경로.RB

resources :users
  resources :sessions, only: [:new, :create, :destroy]
  resources :projects, only: [:create, :new, :show, :edit, :update, :destroy]

  resources :projects do
    resources :versions
  end

  # get "static_pages/home"
  # get "static_pages/help"
  # get "static_pages/about"
  #The original routes above map to...
  root  'static_pages#home'
  match '/signup',  to: 'users#new',            via: 'get'
  match '/signin',  to: 'sessions#new',         via: 'get'
  match '/signout', to: 'sessions#destroy',     via: 'delete'
  match '/help',    to: 'static_pages#help',    via: 'get'
  match '/about',   to: 'static_pages#about',   via: 'get'
  match '/contact', to: 'static_pages#contact', via: 'get'

프로젝트 모델:

class Project < ActiveRecord::Base
  has_many :users
  has_many :versions, dependent: :destroy
  validates :title, presence: true, length: { maximum: 100 }
  validates :background, presence: true
  validates :user_id, presence: true

  default_scope -> { order('created_at DESC') }
end

버전 모델:

class Version < ActiveRecord::Base
  belongs_to :project
  validates :title, presence: true, length: { maximum: 140 }

  default_scope -> { order('created_at DESC') }
end

버전 컨트롤러:

class VersionsController < ApplicationController
  def new
    @version = Version.new
  end

  def show
    @project = Project.find(params[:project_id])
    @version = Version.find(params[:id])
  end

  def index
    @versions = Version.paginate(page: params[:page])
  end

  def create
    @project = Project.find(params[:project_id])
    @version = @project.versions.create(version_params)
    if @version.save
      flash[:success] = "You've successfully added a version to this branch..."
      redirect_to project_path(@project)
    else
      render 'new'
    end
  end

  def edit

  end

  def update

  end

  def destroy

  end

  private

    def version_params
      params.require(:version).permit(:title)
    end
end

NEW.HTML.ERB(새 버전 형식):

<% provide(:title, 'New Version') %>
<h1>Add a version to this project</h1>

<div class="row-fluid">
  <div class="col-md-5 no-pad offset3">
    <%= bootstrap_form_for @version, :url => project_versions_path do |f| %>

      <%= render 'shared/error_messages', object: f.object %>

      <%= f.text_field :title %>

      <br clear="all">

      <%= f.submit "Submit Now! ", class: "btn btn-lg btn-primary" %>
    <% end %>
  </div>
</div>

매개변수:

{"utf8"=>"✓",
 "authenticity_token"=>"######AAAA",
 "submit"=>"Submit Now! ",
 "project_id"=>"51"}

Processing by VersionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"################=", "version"=>"Submit Now! ", "project_id"=>"51"}
  Project Load (0.3ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = ? ORDER BY created_at DESC LIMIT 1  [["id", "51"]]
Completed 500 Internal Server Error in 3ms

NoMethodError (undefined method `permit' for "Submit Now! ":String):
  app/controllers/versions_controller.rb:41:in `version_params'
  app/controllers/versions_controller.rb:17:in `create'
도움이 되었습니까?

해결책

매개변수에서 문제를 인식할 수 있습니다.당신은 이것을 가지고 있습니다 :

{"utf8"=>"✓",
 "authenticity_token"=>"######AAAA",
 "submit"=>"Submit Now! ",
 "project_id"=>"51"}

당신은 이것을 가지고 있어야합니다 :

{"utf8"=>"✓",
 "authenticity_token"=>"######AAAA",
 "project_id"=>"51",
 "version"=>{"title"=>"Foo Bar"},
"button"=>""}

이것이 문제가 되는 이유는 매개변수에 버전 제목이 전달되지 않고 매개변수를 사용하여 새 버전을 만들려고 하기 때문입니다.대신에 이 경우 "Submit Now!"라는 문자열이 되는 가장 가까운 항목을 찾습니다. 그러나 "submit"은 강력한 매개변수보다 허용되지 않으므로 이를 버립니다.

양식을 올바르게 생성한 것 같습니다. bootstrap_form_for에 문제가 있을 수 있습니다.제목에 대한 입력 출력이 양식에 HTML로 어떻게 표시되는지 게시할 수 있습니까?

그 동안 두 가지 제안이 있습니다. 문제를 해결할 수있는 첫 번째는 변경하는 것입니다. f.제출 에게 f.버튼.f.button은 여전히 ​​제출 버튼을 생성하지만, 이를 통해 사용자가 시도하는 방식에 방해가 되는 이름을 지정할 수 있습니다.

또한 컨트롤러에서는 create를 호출한 후에 저장할 필요가 없습니다.create는 실제로 데이터베이스에 저장하므로 두 번 저장하게 됩니다.create 대신 new를 호출해야 합니다.

@version = @project.versions.new(version_params)
if @version.save

새로운 기록이 있는지 확인하세요

@version = @project.versions.create(version_params)
unless @version.new_record?
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top