2016-03-06 6 views
1

У меня есть две модели. Продукт и ProductPrice (с таблицами продуктов и product_prices), каждый продукт имеет одну цену. Я хочу создать форму для обеих моделей, но после репликации решений аналогичных сценариев моя форма по-прежнему не показывает поля для цены.Несколько моделей в новой форме - Рельсы

class Product < ActiveRecord::Base 
    belongs_to :user 
    has_one :ProductPrice 

    accepts_nested_attributes_for :ProductPrice 
end 

class ProductPrice < ActiveRecord::Base 
    belongs_to :Product 
end 

class ProductsController < ApplicationController 

    def new 
     @product = Product.new 
     @product_price = @product.build_ProductPrice 
    end 

end 


<%= form_for @product, url: user_product_path do |f| %> 
    <div class="form-group"> 
     <%= f.text_field :product_name, placeholder: 'name', class: 'form- control' %> 
    </div> 

    <% f.fields_for @product_price do |b| %> 
    <%= b.text_field :price, placeholder: 'Enter price', class: 'form-control' %> 
    <%end%> 
<% end%> 

Любые идеи? правильно ли я ссылался на модели?

Редактировать: Исправлено. Это должно было быть <% = fields_for .... Знак равенства не достал

ответ

1

Попробуйте

class Product < ActiveRecord::Base 
    belongs_to :user 
    has_one :product_price 

    accepts_nested_attributes_for :product_price 
end 

class ProductPrice < ActiveRecord::Base 
    belongs_to :product 
end 

class ProductsController < ApplicationController 
    def new 
     @product = Product.new 
     @product.product_price.build 
    end 
end 


<%= form_for @product, url: user_product_path do |f| %> 
    <div class="form-group"> 
     <%= f.text_field :product_name, placeholder: 'name', class: 'form-control' %> 
    </div> 

    <%= f.fields_for :product_price do |b| %> 
     <%= b.text_field :price, placeholder: 'Enter price', class: 'form-control' %> 
    <%end%> 
<% end%> 
+0

все еще получает ту же ошибку "неопределенный метод' build 'для nil: NilClass " –

0

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

Вы можете попробовать следующее:

class Product < ActiveRecord::Base 
    belongs_to :user 
    has_one :product_price 

    accepts_nested_attributes_for :product_price 
end 

class ProductPrice < ActiveRecord::Base 
    belongs_to :product 
end 

class ProductsController < ApplicationController 
    def new 
    @product = Product.new 
    @product_price = @product.product_price.build 
    end 
end 


<%= form_for @product, url: user_product_path do |f| %> 
    <div class="form-group"> 
    <%= f.text_field :product_name, placeholder: 'name', class: 'form-control' %> 
    </div> 

    <% f.fields_for @product_price do |b| %> 
    <%= b.text_field :price, placeholder: 'Enter price', class: 'form-control' %> 
    <%end%> 
<% end%> 

Примечание стороны, но product.product_price.price чувствует себя странно. Зависит от остальной части вашей структуры, но для создания ассоциации здесь нет необходимости просто хранить цену на продукте.

+0

Начну использовать случаи змеиных (довольно новые для RoR). Я попробовал ваше предложение и теперь получил следующую ошибку: «undefined method' build »для nil: NilClass» на @product_price = @ product.product_price.build. Что касается побочного примечания, согласованного, будет изменен продукт, чтобы включить цену, но мне нужно понять это для будущего использования. –

+0

Любые идеи, пожалуйста, помогите .... –

Смежные вопросы