Rails: ошибка при попытке создать профили пользователей

Я новичок в рельсах, и я пытаюсь изучить его. Я создал модель профиля с контроллером, используя:

rails g model Profile twitter:string, about:text, country:string

Теперь я пытаюсь связать пользователя (созданного с помощью devise) с профилями, я сделал профиль и ассоциацию пользователей следующим образом:

User.rb

class User < ActiveRecord::Base

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,

 :recoverable, :rememberable, :trackable, :validatable
 has_many :posts
 has_many :comments 
 has_one :profile, dependent: :destroy

    has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100#" }, default_url: "/images/:style/missing.png"
      validates_attachment_content_type :avatar, content_type:  /\Aimage\/.*\Z/        
    
    end

profile.rb

class Profile < ActiveRecord::Base
	belongs_to :user
end

ProfilesController.rb

class ProfilesController < ApplicationController

def new
	@profile = Profile.new
end

def create
	@profile = Profile.new(params[:profile].permit(:twitter, :about, :country))

if @profile.save
	redirect_to profile_path
else 
	render 'profile'
end

end

end

UsersController.rb

class UsersController < ApplicationController
	def create
	end 
	def index
		
	end
end

Частичная форма, которую я пытаюсь отобразить

_profile.html.erb

<%= form_for ([@user, @profile.user_build])  @profile do |f| %>
<%= current_user.name %>
<%= f.text_area:about, label: 'Name' %>
<%= f.text_field :twitter, label: 'Your Twitter' %>
<%= f.text_field :country, label: 'Your Country' %>
<% end %>

Теперь я получаю эту ошибку, когда захожу на localhost:3000/profiles/new

    /home/alexandrov/web_development/thedesignable/app/views/partials/_profile.html.erb:1: syntax error, unexpected tIVAR, expecting keyword_end [email protected]_build]) @profile do |f| @output_buffer.safe_a... ... ^ /home/alexandrov/web_development/thedesignable/app/views/partials/_profile.html.erb:7: syntax error, unexpected keyword_ensure, expecting end-of-input
<%= form_for ([@user, @profile.user_build])  @profile do |f| %>
<%= current_user.name %>
<%= f.text_area:about, label: 'Name' %>
<%= f.text_field :twitter, label: 'Your Twitter' %>
<%= f.text_field :country, label: 'Your Country' %>
<% end %>

Мой файл routes.rb выглядит так

    Rails.application.routes.draw do
  devise_for :users
  mount Ckeditor::Engine => '/ckeditor'
  get 'pages/home'

  get 'pages/thecompany'

  get 'pages/ourwork'

  get 'pages/plansandpricing'

  get 'pages/tour'

  get 'pages/tutorialsandvideos'

  get 'pages/contact'

  get 'pages/faq'

  get 'pages/tandc'

 resources :posts do
    member do
      get "like", to: "posts#upvote"
      get "dislike", to: "posts#downvote"
    end
    resources :comments
  end
  resources :users
  resources :profiles

  root 'pages#home'
end

Я не могу понять, что я делаю неправильно, а также какой тип миграции мне нужен.. нужно ли мне выполнять rails g migration AddUserIdToProfile?


person Victor.A    schedule 21.06.2015    source источник


Ответы (3)


я верю этой строчке

<%= form_for ([@user, @profile.user_build])  @profile do |f| %>

должно быть

<%= form_for ([@user, @profile.user_build]) do |f| %>
person Pavan    schedule 21.06.2015
comment
Я пытаюсь создать профиль пользователя для пользователя (как существующий, так и новый). Я отредактировал эту строку и теперь получаю эту ошибку: неопределенный метод `profile_build' для nil:NilClass - person Victor.A; 21.06.2015
comment
@Victor.A какой файл содержит этот фрагмент? - person Pavan; 21.06.2015
comment
partials/_profile.html.erb, который отображается в режиме редактирования и обновления - person Victor.A; 21.06.2015

Я, наконец, исправил это другим способом, я использовал поля данных разработки, а пользователи «показывали» представление для достижения этой цели. Теперь я могу заставить пользователя зарегистрироваться и использовать те же данные, которые будут получены в представлении шоу.

Все работает отлично. В случае, если кому-то нужно знать больше, дайте мне знать. Я был бы рад помочь вам.

person Victor.A    schedule 22.06.2015

У вашего UsersController есть дополнительный «конец» посередине. Должно быть:

class UsersController < ApplicationController
  def create; end 
  def index;end
end
person Thupten N Chakrishar    schedule 21.06.2015
comment
извините опечатку исправил. все равно не помогает - person Victor.A; 21.06.2015