リソースをネストする方法、具体的にはそれを CarrierWave と結び付ける方法について、誰かが私に洞察を与えてくれることを期待していました。
エラーが発生undefined method 'photos_path'
し、これを機能させる方法について少し行き詰まっています。
次のURLを取得できるようにしたい
新しい写真を作成する
site.com/animal/dog/photos/new
写真を表示
site.com/animal/dog/photos/my-dog-in-the-park
ネストされたフォームを使用する必要がありますか? どんな助けでも大歓迎です。
マイルート
root to: "home#index"
resources :animal do
resources :photos
end
マイホームビュー
<%= link_to "Add Dog Photo", new_animal_photo_path(animal_permalink: "dog") %>
私の _form パーシャル
<%= form_for [@animal, @photo], :html => {:multipart => true} do |f| %>
<%= f.hidden_field :animal_permalink %>
<p>
<%= f.label :title %><br />
<%= f.text_field :title %>
</p>
<p>
<%= f.file_field :image %>
</p>
<p>
</p>
<p><%= f.submit %></p>
<% end %>
私の写真モデル
class Photo < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection
before_create :set_permalink
before_update :set_permalink
belongs_to :dog
mount_uploader :image, PhotoUploader
def set_permalink
self.permalink = title.parameterize
end
def to_param
permalink.parameterize
end
end
私の動物モデル
class Animal < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection
has_many :photos
scope :dog, where(name: "Dog")
def to_param
permalink.parameterize
end
end
私のフォトコントローラー
class PhotosController < ApplicationController
def show
@photo = Photo.find(params[:id])
end
def new
@animal = Animal.find_by_permalink(params[:id])
@photo = Photo.new
end
def create
@photo = Photo.new(photo_params)
if @photo.save
flash[:notice] = "Successfully created photo."
redirect_to root_url
else
render :action => 'new'
end
end
def edit
@photo = Photo.find(params[:id])
end
def update
@photo = Photo.find(params[:id])
if @photo.update_attributes(photo_params)
flash[:notice] = "Successfully updated photo."
redirect_to root_url
else
render :action => 'edit'
end
end
def destroy
@photo = Photo.find(params[:id])
@photo.destroy
flash[:notice] = "Successfully destroyed photo."
redirect_to root_url
end
private
def photo_params
params.require(:photo).permit(:title, :image, :animal_id)
end
end
ご覧いただきありがとうございます。どんな助けでも大歓迎です。