undefined method `permiso' para "Enviar Ahora!":String.A donde voy mal?
-
21-12-2019 - |
Pregunta
He estado tratando como un loco para trabajar a través de este permit
error en la utilización de algunos de los otros StackOverflow mensajes, pero parece que no puede conseguir más allá de ella.Tengo proyectos modelo y controlador y una de las versiones del modelo y controlador. Projects/##/versions/new
es una página de formulario para crear una nueva versión de project id ##.Pero cuando hago clic en el botón enviar para crear la versión...se tira el siguiente error en el 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
Cualquier ayuda sería muy apreciada...he estado tratando de arreglar esto por demasiado tiempo.Mi Código es el siguiente:
Las RUTAS.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'
PROYECTOS MODELO:
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
VERSIONES DEL MODELO:
class Version < ActiveRecord::Base
belongs_to :project
validates :title, presence: true, length: { maximum: 140 }
default_scope -> { order('created_at DESC') }
end
VERSIONES DE CONTROLADOR:
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
NUEVO.HTML.ERB (nueva versión del formulario):
<% 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>
PARAMS:
{"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'
Solución
Puedo reconocer el problema en los parámetros.Tienes este:
{"utf8"=>"✓",
"authenticity_token"=>"######AAAA",
"submit"=>"Submit Now! ",
"project_id"=>"51"}
Usted debe tener esto:
{"utf8"=>"✓",
"authenticity_token"=>"######AAAA",
"project_id"=>"51",
"version"=>{"title"=>"Foo Bar"},
"button"=>""}
La razón de esto es un problema es porque no tiene una versión del título que se pasa en la params, y usted está tratando de crear una nueva versión con los parámetros.Que en su lugar se ve de lo más cercano, que en este caso pasa a ser la cadena "Enviar Ahora!", pero desde "enviar" no está permitido que fuerte params la arroja fuera.
Parece que va a crear el formulario correctamente, puede ser un problema con bootstrap_form_for.Puedes publicar lo que la entrada y salida para el título se parece en html en el formulario?
Mientras tanto tengo dos sugerencias, La primera cosa que puede resolver el problema, es cambiar f.enviar a f.botón.f.botón crear un botón de enviar, pero permite que usted nombre está en la forma en que usted está tratando.
También en el controlador, no es necesario guardar después de llamar a crear.cree realmente almacenan en la base de datos, por lo que se ahorra dos veces.Debe llamar nuevo en lugar de crear
@version = @project.versions.new(version_params)
if @version.save
de comprobar si el nuevo registro
@version = @project.versions.create(version_params)
unless @version.new_record?