У меня возникают проблемы при создании/создании 2 объектов одновременно и их объединении друг с другом. В настоящее время я делаю это «хакерским» способом, не используя вложенные формы и просто передавая параметры для обоих объектов отдельно (из представления.) Затем я соединяю их в контроллере, вот мой код:Rails3 Ассоциации и вложенные атрибуты
Модели
class Post < ActiveRecord::Base
belongs_to :user
has_one :product
accepts_nested_attributes_for :product, :allow_destroy => true
end
class Product < ActiveRecord::Base
belongs_to :user
belongs_to :post
end
Посмотреть
<%= form_for(@post) do |f| %>
<div id="post_field">
<%= f.text_area :content %>
</div>
<div id="post_link_previewer" class="clearfix">
<%= fields_for :product do |prod| %>
<%= prod.text_field :name %><br />
<%= prod.text_area :description, :rows => 2 %><br />
<%= prod.text_field :image_url %><br />
<%= prod.text_field :original_url %>
<% end %>
</div>
<div id="submit" class="clearfix">
<%= f.submit "Post" %>
</div>
<% end %>
PostsController
def create
@user = current_user
@post = @user.posts.create(params[:post])
@product = Product.create(params[:product])
@post.product_id = @product.id
respond_to do |format|
if @post.save
format.html { redirect_to(root_path, :notice => 'Post was successfully created.') }
format.xml { render :xml => @post, :status => :created, :location => @post }
else
format.html { render :action => "new" }
format.xml { render :xml => @post.errors, :status => :unprocessable_entity }
end
end
end
Так что, когда пользователь делает сообщение, они могут прикрепить к нему сообщение «продукт», если захотят. Текущий способ, которым я занимаюсь, имеет большой смысл. Когда я смотрел на учебники с вложенными формами и рассматривал их с помощью методов построения, я начинаю немного смущаться относительно того, что происходит. Можете ли вы помочь мне понять лучший способ связывания этих двух объектов при создании? Лучше всего использовать вложенные поля формы? Я чувствую, что нынешний путь, который я делаю, не так эффективен, как должен.
спасибо! Перейдя через это снова и используя метод build_association, я обнаружил свою критическую ошибку, у меня был внешний ключ в неправильной таблице doh! – yoshyosh