Я новичок в рельсах и пытаюсь работать с вложенными атрибутами. Основная идея состоит в том, чтобы иметь модель сделки (предложения), сделка будет иметь несколько Deal_photos из скрепки. Я уже смотрел Ryan's Railscast для вложенных форм и читал много статей с множеством советов по проблемам по одному и тому же вопросу, но все же это не работает для меня.
Вот моя реализация:
class Deal < ActiveRecord::Base
belongs_to :user
has_many :deal_photos, dependent: :destroy
accepts_nested_attributes_for :deal_photos
end
class DealPhoto < ActiveRecord::Base
belongs_to :deal
has_attached_file :photo, :styles => { :large => "600x170", :medium => "250x250!", :thumb => "100x100>" }, :default_url => lambda { |photo| photo.instance.set_default_url}
def set_default_url
ActionController::Base.helpers.asset_path('missing.png')
end
end
В моем контроллере сделок:
class DealsController < ApplicationController
def new_deal
@deal=Deal.new()
@user= User.find(params[:id])
3.times { @deal.deal_photos.build }
end
def create
@deal = Deal.new(deal_param)
@user= User.find(params[:user_id])
if @deal.save
@user.deals << @deal
flash[:notice]="Thank you"
end
end
def edit
@deal=Deal.find(params[:deal_id])
3.times { @deal.deal_photos.build }
end
def update
@deal=Deal.find(params[:id])
if @deal.update_attributes(deal_params)
flash[:notice]="Deal updated successfully"
end
end
private
def deal_params
params.require(:deal).permit(:title, :description, :contact_num, :user_id, :deal_photos_attributes => [ :id, :caption, :photo, :deal_id])
end
Наконец в моей форме для новой сделки:
<%= form_for(:deal, :url=>{:action=>'create', :user_id=> @user.id}) do |f| %>
<label>Title<b style="color:red;">*</b>
<%= f.text_field(:title, :placeholder=>"") %>
</label>
---------------------------больше полей---------------------
<%= f.fields_for :deal_photos do |builder| %>
<div>
<%= builder.label :caption, "Image Caption" %>
<%= builder.text_field :caption %>
<%= builder.label :photo, "Image File" %>
<%= builder.file_field :photo %>
</div>
<%end%>
<%= button_tag("Create", :class=> "secondary button", :button_type => "submit") %>
(Я перенес БД для Deals_photo, чтобы принять скрепку)
Приведенное выше создает форму со всеми полями, но вместо 3 входов для загрузки файла показывает только один. Он создает 3 пустых ассоциации @deal.deal_photos, но даже если я выберу одно изображение для загрузки из формы, оно не сохранит его. Если у вас есть полезные советы или другой подобный вопрос, пожалуйста, помогите!