Неопределенный параметр: ROR

Я новичок, и когда я отправляю свою форму:

<%= form_for :project, url: projects_path, html: {id:'form'} do |f| %>

    <%= f.text_field :text, placeholder: '???????°N? ?·?°???°N‡?°'  %> 

    <%= link_to  '?zN‚???µ???°', '', id:'cancel_link' %>
    <%= link_to  '?zN‚??N€?°????N‚N?', projects_path, id:'submit_link' %>

<% end %>

Ошибка:

Parameters: {"utf8"=>"?", "authenticity_token"=>"OR2HWCi3zVz9gB5VAmnzbEuzIwFGE58JlLrWQdNcws6FVTzqh5Cu0zvUJTUEv2O/sCvU9HuadJYr3mfA40ehGA==", "project"=>{"text"=>"NEW ITEM"}} Unpermitted parameter: :text

Есть две модели:

class Project < ApplicationRecord
 has_many :todos
 validates :title, presence: true
 accepts_nested_attributes_for :todos
end


class Todo < ApplicationRecord
  belongs_to :project, required: false
end

Класс ProjectsController < ApplicationController DEF индекс @projects = Project . all end def create @project = Project . new ( project_params ), если @project . save redirect_to root_path end end def update end private def project_params params . require (: project ). разрешение (: название , Todos_attributes : [: идентификатор , : текст ]) конец конец модель имеет класс CreateProjects < ActiveRecord :: Migration [ 5,2 ] Защиту изменить create_table : проекты делают | t | т . string : title t . string : todos t . атрибут конца метки времени, в котором должен находиться наш todo

контроллер

 class CreateTodos < ActiveRecord::Migration[5.2]
 def change
   create_table :todos do |t|
     t.text :text
     t.boolean :isCompleted
     t.integer :project_id

     t.timestamps
end

Проект db

text

Todo db

Todo

Я запрашиваю атрибуты todo с помощью accepts_nested_attributes_for: nested_form, контроллер также зарегистрирован в руководствах, в project_params я запрашиваю todos_attributes. Но при отправке формы в базу данных значение <% = nested_form_for : project , url : projects_path , html : { id : 'form' } do | f | %> <% = f . text_field : title , placeholder : '? ?? ????? ° N ?? I ? ° ?'? ° N ‡ ? ° ' %> <% = f . fields_for : todos do | todo_form | %> <% = todo_form . text_field : text %> <% = todo_form . link_to_remove "Удалить это todo" %> <% end %> < p > <% = f . link_to_add "Добавить TODO" , : Todos %> </ р > <% = link_to '?zN,??????? °' , '' , ид : 'cancel_link' %> <% = link_to «?zN,??N € ? ° ??? ?С , N? ' , projects_path , id : ' submit_link ' %> <% end %> . Он не спасает дБ. Можете ли вы помочь

ruby-on-rails,ruby,

0

Ответов: 2


Чтобы сохранить textполе в Todoмодели, вам нужно создать вложенную форму. todosДля этого используйте драгоценный камень.

Смутный пример, чтобы показать, как это работает:

nestead_form

В контроллере, чтобы иметь возможность удалить todo в случае редактирования проекта:

Unpermitted parameter

В миграции textя не думаю, что вам требуется todosкак строка.


0

Форма, которую вы создали, неверна, вам необходимо создать title

Это дает вам и titleошибку, потому что textэто не поле модели проекта, которое вы можете проверить в своем файле миграции. Вы должны изменить его, titleпотому что titleэто поле модели проекта.

И для создания вложенной формы вам нужно внести некоторые изменения в вашу форму

<%= form_for :project, url: projects_path, html: {id:'form'} do |f| %>

   <%= f.text_field :title, placeholder: '???????°N? ?·?°???°N‡?°'  %> 
   <%= f.fields_for :todos do |todo| %>
      <%= f.text_field :text %>
   <% end %>

   <%= link_to  '?zN‚???µ???°', '', id:'cancel_link' %>
   <%= link_to  '?zN‚??N€?°????N‚N?', projects_path, id:'submit_link' %>

<% end %>
рубин-на-рельсы, рубин,
Похожие вопросы