Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3.2.13未定义的“照片路径”方法;使用带有CarrierWave的嵌套资源_Ruby On Rails_Carrierwave - Fatal编程技术网

Ruby on rails Rails 3.2.13未定义的“照片路径”方法;使用带有CarrierWave的嵌套资源

Ruby on rails Rails 3.2.13未定义的“照片路径”方法;使用带有CarrierWave的嵌套资源,ruby-on-rails,carrierwave,Ruby On Rails,Carrierwave,我希望有人能给我一些关于如何嵌套资源的见解,更具体地说,如何将其与CarrierWave联系起来 我遇到了一个错误未定义的方法“photos\u path”,我有点纠结于如何让它工作 我想能够有以下网址 创建一张新照片 site.com/animal/dog/photos/new 展示照片 site.com/animal/dog/photos/my-dog-in-the-park 我应该使用嵌套表单吗?非常感谢您的帮助 我的路线 root to: "home#index" resources

我希望有人能给我一些关于如何嵌套资源的见解,更具体地说,如何将其与CarrierWave联系起来

我遇到了一个错误
未定义的方法“photos\u path”
,我有点纠结于如何让它工作

我想能够有以下网址

创建一张新照片 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_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 %>
{:multipart=>true}do | f |%>


我的照片模型

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-Photo
我的动物模型

class Animal < ActiveRecord::Base
  include ActiveModel::ForbiddenAttributesProtection

  has_many :photos

  scope :dog, where(name: "Dog")

  def to_param
    permalink.parameterize
  end
end
class Animal
我的光电控制器

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
class photocontroller“新建”
结束
结束
定义编辑
@photo=photo.find(参数[:id])
结束
def更新
@photo=photo.find(参数[:id])
如果@photo.update_属性(photo_参数)
flash[:notice]=“已成功更新照片。”
将\u重定向到根\u url
其他的
呈现:操作=>“编辑”
结束
结束
def销毁
@photo=photo.find(参数[:id])
@照片。销毁
flash[:notice]=“已成功销毁照片。”
将\u重定向到根\u url
结束
私有的
def照片参数
参数要求(:照片)。许可证(:标题,:图像,:动物id)
结束
结束

谢谢你看。非常感谢您的帮助。

我对您的代码做了一些调整

请注意,我在animal中添加了一个“s”

root to: "home#index"

resources :animals do
  resources :photos
end
注意,我已经从动物身上删除了一个“s”。我已将animal_permalink更改为id,因为这是嵌套资源所期望的默认值。另外,请注意,在photos controller的新方法中,您检查的是“id”参数,而不是animal_permalink参数

new_animal_photo_path(id: "dog")
以你的形式。设置动物\u permalink的值

<%= f.hidden_field :animal_permalink, value: @animal.permalink %>

这假设Photo能够识别animal_permalink属性,并且您已经定义了animal.permalink方法/属性。我不熟悉permalink方法,因此您可能需要稍微调整一下,但这应该会引导您朝着正确的方向前进(我通常会设置:dog\u id/:animal\u id属性)


让我知道这是怎么回事。

错误看起来像是在抱怨路线问题。@animal object能否在/animal/dog/photos/new上为零?嗨,斯沃兹,谢谢你的回复。我来看看。我想这也可能是因为在新控制器中没有将动物id传递给@photo。似乎缺少了一些重要的东西。。。您何时收到错误?你能贴出错误的痕迹吗?看起来您在代码中的某个地方调用了一个尚未定义的路径。嘿,cgat!谢谢这接近于我目前的工作解决方案。在新操作中,我创建了一个实例变量@photo=@animal.photos.build(animal\u id:@animal\u id)。在一个动作中有两个实例变量可以吗?或者我应该考虑重构吗?在一个动作中有两个实例变量可以。你以前的新动作很好。通过使用animal\u id构建@photo,您所做的就是允许表单访问@photo.animal\u id,但您已经可以通过@animal访问该值。您的表单将为新对象设置参数,因此如果您想创建一张带有animal_id:@animal.id的照片,您必须在表单中包含一个隐藏字段(当然,您似乎使用了permalink)。还要注意
@animal.photos.build(animal\u id:@animal\u id)
等于
@animal.photos.build