Форма Rails создает экземпляр, но не заполняет его данными - PullRequest
1 голос
/ 13 апреля 2019

Прежде чем я углублюсь в это: Да, я знаю, что это не безопасный способ хранения имен пользователей и паролей.

Продолжая, я пытаюсь настроить систему, которая позволит мне создавать учетные записи с именем пользователя, паролем и значением, а затем отображать имя пользователя и значение каждой учетной записи. Я дошел до того, что он создаст новый шаблон, из-за отсутствия лучшего слова, для отображения имени пользователя и значения, но на самом деле ничего не отображается. Мой контроллер:

class TestController < ApplicationController
  def index
    @accounts = Account.all
  end

  def new
    @account = Account.new
  end

  private def account_params
    params.require(:account).permit(:username).permit(:password)
  end

  def create
    @account = Account.new(account_params)
    if @account.save
      redirect_to '/index'
    else
      render 'new'
    end
  end
end

И моя форма:

<%= form_for(@account) do |f| %>
  <div class="field">
    <h3>Username:</h3>
    <%= f.text_area :username %><br>
    <h3>Password:</h3>
    <%= f.text_area :password %>
  </div>
  <div class="action">
    <%= f.submit "Create" %>
  </div>
<% end %>

Наконец, мой файл миграции:

class CreateAccounts < ActiveRecord::Migration[5.2]
  def change
    create_table :accounts do |t|
      t.string :username
      t.string :password
      t.integer :value
    end
  end
end

Фактический код, отображающий каждую учетную запись:

<% @accounts.each do |t|  %>
  <div class="accountbox">
    <strong>Username:</strong><%= t.username  %><br>
    <br>
    <strong>Value:</strong> <%= t.value  %><br>
  </div>
<% end  %>

Маршруты:

Rails.application.routes.draw do
  get 'index' => 'test#index'
  get 'new' => 'test#new'

  post 'accounts' => 'test#create'
end

О, и я должен отметить, что данные в db/seed.rb отображаются правильно, просто не работают созданные учетные записи.

1 Ответ

1 голос
/ 14 апреля 2019

Я думаю, что часть проблемы здесь - белый список account_parameters.

permit(*filters) принимает набор символов, представляющих разрешенные параметры. Это должно выглядеть как permit(:username, :password). Вызывая permit для результата permit, я считаю, что этот код фильтруется до :username, а затем из этого списка пытается извлечь :password, теряя оба значения в процессе.

Попробуйте изменить эту функцию на:

private def account_params
  params.require(:account).permit(:username, :password)
end

Разрешить документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...