2014-02-03 3 views
0

Я пытаюсь создать форму, которая позволяет пользователю создавать новую Почту, Тег для этого сообщения и TagType для этого тега, все с одной кнопкой отправки.Одна форма для обновления нескольких моделей

Мои модели устанавливаются следующим образом:

class Post < ActiveRecord::Base 
belongs_to :user 
has_many :post_tag_relationships, dependent: :destroy 
has_many :tags, through: :post_tag_relationships 
. 
. 
end 

class Tag < ActiveRecord::Base 
has_many :reverse_post_tag_relationships, class_name: "PostTagRelationship" 
has_many :posts, through: :reverse_post_tag_relationships, 
        class_name: "PostTagRelationship" 
belongs_to :tag_type 
. 
. 
end 

class TagType < ActiveRecord::Base 
has_many :tags 
. 
. 
end 

В контроллере страницы, где находится форма, у меня есть методы, определенные следующим образом:

@post = current_user.posts.build 
@tag = @post.tags.build 
@tag_type = @tag.tag_type.build 

Моя форма отображается нормально, если Я только включает в себя пост и теги методы, как:

<%= form_for(@post) do |f| %> 
<%= render 'shared/error_messages', object: f.object %> 
<div class="field"> 
<%= f.text_area :content, placeholder: "Compose new post..." %> 
</div> 

<%= fields_for(@tag) do |u| %> 
<div class="field"> 
<%= u.text_area :name, placeholder: "Tag" %> 
</div> 
<% end %> 

<%= f.submit "Post", class: "btn btn-large btn-primary" %> 
<% end %> 

Но когда я добавить fields_for (@tag_t ип), с:

<%= fields_for(@tag_type) do |y| %> 
<div class="field"> 
<%= y.select :name %> 
</div> 
<% end %> 

Я получаю неопределенный метод «название модели» для NilClass: Класс

Я довольно новый с Rails, и я думаю, что это что-то делать с тем фактом, что тег принадлежит_ tag_types (в то время как теги post_many - post). Если кто-то знает исправить, это было бы очень признательно. Благодарю.

+0

Rails 3? https://github.com/ryanb/nested_form – omarvelous

+0

Нет, используя Rails 4 – camt89

ответ

2

Вы можете использовать рельсы вложенные атрибуты http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html или создать объект формы http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/

+0

Прохладный. Следующий вопрос: В примерах вложенности accepts_nest_attributes_for всегда находится в модели, которая has_one или has_many из другой модели. Может ли моя модель тега принять вложенные атрибуты для tag_type, если тег принадлежит_ tag_type? – camt89

+0

http://stackoverflow.com/questions/7365895/does-accepts-nested-attributes-for-work-with-belongs-to - но я бы наклонился к объекту формы. – bridiver

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