Ruby on Rails: как мне делать вложенные формы с отношением has_one? - PullRequest
5 голосов
/ 31 декабря 2010
class PollOption < ActiveRecord::Base
  belongs_to :poll
  has_one :address
end


class Address < ActiveRecord::Base
  belongs_to :user, :poll_options
  apply_addresslogic :fields => [[:number, :street], :city, [:state, :zip_code]]
end

Это мои подходящие модели. Есть идеи? Мне просто нужен хороший пример.

Ответы [ 2 ]

16 голосов
/ 26 мая 2015

для рельсов 4

Модель продукта

has_one                         :nutrition_fact, dependent: :destroy
accepts_nested_attributes_for   :nutrition_fact

Модель факта питания

belongs_to :product

ProductsController

def new
  @product = Product.new
  @product.build_nutrition_fact
end

def edit
  @product.build_nutrition_fact if @product.nutrition_fact.nil?
end

private

def product_params
  params.require(:product).permit(:title, :price, nutrition_fact_attributes: [:serving_size, :amount_per_serving, :calories])
end

Вид / произведения / new.html.erb

<%= form_for @product do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title %>
  <%= f.label :price %>
  <%= f.text_field :price %>

  <%= f.fields_for :nutrition_fact do |fact| %>
    <%= fact.label :serving_size %>
    <%= fact.text_field :serving_size %>
    <%= fact.label :amount_per_serving %>
    <%= fact.text_field :amount_per_serving %>
    <%= fact.label :calories %>
    <%= fact.text_field :calories %>
  <% end %>

  <%= f.submit "Create Product", class: "example-class" %>
<% end %>
3 голосов
/ 31 декабря 2010

Это должно ответить:

http://archives.ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes

Основная идея состоит в том, чтобы объявить accepts_nested_attributes_for :address в вашей модели PollOption и изменить форму, как указано в шаге 2 ссылки Iпредоставляется.

Еще одна полезная ссылка: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

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