jeudi 21 avril 2016

Nested attributes text field isn't showing up in my views

I am new to the rails community. I am working on an application where users can have username with a nested attribute of first and last name. The other text field associated with the User model works fine.

Any help would be much appreciated.

Attached are the app models, controllers, migration files, db schema, and views.

models

class User < ActiveRecord::Base
  has_one :username, dependent: :destroy
  accepts_nested_attributes_for :username, allow_destroy: true

end


class Username < ActiveRecord::Base
  belongs_to :user


end

Migrations

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :email
      t.string :about_me
      t.string :nationality
      t.string :sexe
      t.timestamps null: false
    end
  end
end


class CreateUsernames < ActiveRecord::Migration
  def change
    create_table :usernames do |t|
      add_column :username, :first_name, :string
      add_column :username, :last_name, :string
      t.references :user, index: true, foreign_key: true
      t.timestamps null: false
    end
  end
end

controller

class UsersController < ApplicationController
  def index
    @all_users = User.all
    @new_user = User.new
    @username = Username.new
  end

  def new
    @new_user = User.new
  end

  def create
    User.create(user_params)
  end

  private

  def user_params
    params.require(:user).permit(:email, :about_me, username_attributes:
    [:last_name, :first_name])
  end
end

Views

<h1>Users#index</h1>
<p>Find me in app/views/users/index.html.erb</p>


<%= form_for @new_user do |f| %>
  <%= f.fields_for @new_user do |user| %>
    <div class="field">
      <%= user.label :email%>
      <%= user.text_field :email %>
      <%= user.label :about_me %>
      <%= user.text_field :about_me %>
    </div>
    <% end %>
    <%= f.fields_for :username do |name| %>
      <div class="field">
        <%= name.label :first_name %>
        <%= name.text_field :first_name %>
      </div>
    <% end %>


     <div class="form-actions">
        <%= f.button :submit %>
      </div>

<% end %>




Aucun commentaire:

Enregistrer un commentaire