Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 3 在嵌套模型窗体中显示错误消息时出现问题_Ruby On Rails 3_Nested Forms - Fatal编程技术网

Ruby on rails 3 在嵌套模型窗体中显示错误消息时出现问题

Ruby on rails 3 在嵌套模型窗体中显示错误消息时出现问题,ruby-on-rails-3,nested-forms,Ruby On Rails 3,Nested Forms,我很难弄清楚如何显示错误消息——事实上,甚至无法在错误页面上显示页面 以下是我目前拥有的: media.rb class Media < ActiveRecord::Base belongs_to :project has_attached_file :media_file, :default_url => '/media_file/missing.png' validates :description, :presence => true validate

我很难弄清楚如何显示错误消息——事实上,甚至无法在错误页面上显示页面

以下是我目前拥有的:

media.rb

class Media < ActiveRecord::Base

  belongs_to :project
  has_attached_file :media_file, :default_url => '/media_file/missing.png'

  validates :description, :presence => true
  validates_attachment_content_type :media_file, :content_type => ['image/gif', 'image/jpg', 'image/jpeg', 'image/png', 'audio/mpeg', 'audio/wav']

  MEDIA_TYPES = ["Image", "Audio", "Video"]
end
medias_controller.rb

def new
  @project = Project.find params[:project_id]
  @media = Media.new(:project=>@project)

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @media }
  end
end

def create
  @media = Media.new(params[:media])

  @media.project_id = params[:project_id]

  respond_to do |format|
    if @media.save
      format.html { redirect_to(@media.project, :notice => 'Media was successfully created.') }
      format.xml  { render :xml => @media, :status => :created, :location => @media }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @media.errors, :status => :unprocessable_entity }
    end
  end
end

def update
  @media = Media.find(params[:id])

  respond_to do |format|
    if @media.update_attributes(params[:media])
      format.html { redirect_to(@media.project, :notice => 'Media was successfully updated.') }
      format.xml  { head :ok }
    else
      format.html { render :action => "edit" }
      format.xml  { render :xml => @media.errors, :status => :unprocessable_entity }
    end
  end
end
当前的问题是,在尝试为存在验证问题的项目创建新媒体记录时,我遇到以下错误:


ActionController::媒体中的路由错误#创建 显示D:/test/app/views/medias/new.html.erb,其中第5行出现:

没有路由匹配{:action=>“destroy”,:controller=>“projects”}

提取的源(第5行附近): 2: 三: 4: 5:


此错误的url为:(新页面的url为)。如果没有任何验证问题,“创建”将通过。我能够“编辑”现有记录而不会出现问题,这包括在需要时显示验证错误-但是“编辑”验证仅在我将“:update”添加到resources:media和嵌套在:projects中的resources:media之后发生。我不确定这是不是个好主意

非常感谢您对如何实现这一目标的任何见解

resources :medias, :only => [:destroy, :update]
resources :projects do
  resources :medias, :only => [:create, :edit, :index, :new, :show, :update]
end
def new
  @project = Project.find params[:project_id]
  @media = Media.new(:project=>@project)

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @media }
  end
end

def create
  @media = Media.new(params[:media])

  @media.project_id = params[:project_id]

  respond_to do |format|
    if @media.save
      format.html { redirect_to(@media.project, :notice => 'Media was successfully created.') }
      format.xml  { render :xml => @media, :status => :created, :location => @media }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @media.errors, :status => :unprocessable_entity }
    end
  end
end

def update
  @media = Media.find(params[:id])

  respond_to do |format|
    if @media.update_attributes(params[:media])
      format.html { redirect_to(@media.project, :notice => 'Media was successfully updated.') }
      format.xml  { head :ok }
    else
      format.html { render :action => "edit" }
      format.xml  { render :xml => @media.errors, :status => :unprocessable_entity }
    end
  end
end