In my application I have a project ,for each project user can upload many assets. The Upload is done by carrier wave. I have two questions:
1)is there a better way of writing the create method?
2) How should I change my update method to update the attached files
The model,project.rb
class Project < ActiveRecord::Base
belongs_to :user
has_many :assets
end
the asset mode, asset.rb
class Asset < ActiveRecord::Base
belongs_to :project
belongs_to :user
mount_uploader :attachment, AttachmentUploader #CarrierWave
end
This is my Create method which works fine
def create
@project = Project.new(project_params)
respond_to do |format|
if @project.save
if params[:assets] && params[:assets]['attachment']
params[:assets]['attachment'].each do |a|
@asset = @project.assets.create!(:attachment => a, :user_id=>@project.user.id)
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render :show, status: :created, location: @project }
end
else
format.html { render :new }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
else
format.html { render :new }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
def project_params
params.require(:project).permit(:user_id, :summary, :start_date,assets_attributes: [:id, :project_id, :attachment,:user_id] )
end
here is the Update method
def update
respond_to do |format|
if @project.update(project_params)
format.html { render :edit }
format.json { render json: @project.errors, status: :unprocessable_entity }
else
format.html { render :edit }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end