お世話になっております。
Ruby on Railsで「ユーザーと紐付いている別モデル」にフォーム送信するようにしたいと考えているのですが、どうやってやるべきなのかがなかなか見えず困っています・・・
具体的に言うと、Facebookカバー写真を設置するために「UserImage」モデルを作成しており、これにアップロードするための方法が分からないということです。
CarrierWaveを使用しているため、ユーザーモデルにカバー写真が紐付けられていません。
開発環境
・Rails 5.0.0.1
・Carrier Wave
・Devise
##該当するソースコード
views/devise/registration/edit.html.erb
ruby
1<% provide(:title, "アカウントの編集") %> 2<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> 3<%= devise_error_messages! %> 4<section class="mypage-profile"> 5 <div class="container mypage-form title"> 6 <div class="title-text"> 7 <h2>プロフィールの編集</h2> 8 </div> 9 <form> 10 <div class="form-group"> 11 <%= f.label :name, "ユーザー名" %> 12 <%= f.text_field :name, :placeholder => "ユーザー名", :value => @user.name, class: "form-control" %> 13 </div> 14 15 <!-- ここがUserImageモデルに紐付いているカラム --> 16 <div class="form-group"> 17 <%=f.label :image,"ユーザー画像" %> 18 <%= f.file_field :image %> 19 </div> 20 <div class="form-group"> 21 <%=f.label :image,"カバー画像" %> 22 <%= f.file_field :cover_image %> 23 </div> 24 <!-- /ここがUserImageモデルに紐付いているカラム --> 25 26 <div class="form-group"> 27 <%= f.label :description, "自己紹介" %> 28 <%= f.text_area :description, :placeholder => "自己紹介", :size => "10x10", :value => @user.description, class: "form-control" %> 29 </div> 30 <%= f.submit "登録内容を変更する", class: "btn btn-form" %><br /> 31 </form> 32 <% end %> 33 </div> 34</section>
user.rb
ruby
1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :trackable, :validatable, 6 :omniauthable 7 has_many :reviews, dependent: :destroy 8 has_many :user_images 9 10 class << self 11 def find_for_facebook_oauth(auth) 12 where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 13 user.email = auth.info.email 14 user.password = Devise.friendly_token[0,20] 15 user.name = auth.info.name 16 end 17 end 18 19 def create_unique_string 20 SecureRandom.uuid 21 end 22 23 def create_unique_email 24 User.create_unique_string + "@example.com" 25 end 26 end 27 28 private 29 30 def user_params 31 params.require(:user).permit(:name, :email) 32 end 33end
user_image.rb
ruby
1class UserImage < ApplicationRecord 2 belongs_to :user 3 4 mount_uploader :image, ThumbnailUploader 5 mount_uploader :cover_image, ThumbnailUploader 6end
users_controller.rb
ruby
1class UsersController < ApplicationController 2 3 def new 4 @user_image = User.new(create_params) 5 2.times { @user.user_images.build } 6 end 7 8 def show 9 @user = User.find(params[:id]) 10 end 11 12 private 13 14 def user_params 15 params(:user).permit(:name, :email, :background, :description) 16 end 17 18 def create_params 19 params.require(:users).permit(user_images_attributes: [:image, :cover_image]) 20 end 21end
##試してみたこと
form_for の中にform_forしてみましたが、やり方が悪いのかできませんでした・・・汗
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/27 14:01
2017/06/27 14:34 編集
2017/06/28 09:47