嵌套路由未定义变量Rails

时间:2015-04-21 15:16:33

标签: ruby-on-rails controller routes nested edit

我正在尝试构建嵌套路由,如上所述here我试图将我的船图编辑为<%= link_to "edit", edit_boat_picture_path(@boat, picture) %>。但是当我尝试它时,会为#&lt;#:0x007f9637811ee0&gt;`

引发错误undefined local variable or method图片' 我的图片控制器是; (也许破坏也是错误的)

class PicturesController < ApplicationController
  before_action :logged_in_user
  before_filter :load_parent

  def index
    @picture = @boat.pictures.all
  end

  def new
    @picture = @boat.pictures.new
  end

  def show
    @pictures = @boat.pictures.find(params[:id])
  end


  def create

    @picture = @boat.pictures.new(picture_params)
    if @picture.save
      #flash[:success] = "Continue from here"
      render 'show'
    else
      render 'new' 
    end
  end

  def edit
    @picture = Picture.find(params[:id])
  end

  def update
    @picture = @boat.pictures.find(params[:id])

    if @picture.update_attributes(picture_params)
      flash[:notice] = "Successfully updated picture."
      render 'show'
    else
      render 'edit'
    end
  end

  def destroy

    @picture = @boat.pictures.find(params[:id])
    @picture.destroy
    flash[:notice] = "Successfully destroyed picture."
    redirect_to @picture.boat
  end


  private

    def picture_params
      params.require(:picture).permit(:name, :image)
    end

    def load_parent
     @boat = Boat.find(params[:boat_id])
    end

end

1 个答案:

答案 0 :(得分:2)

大概你应该改变

<%= link_to "edit", edit_boat_picture_path(@boat, picture) %>

<%= link_to "edit", edit_boat_picture_path(@boat, @picture) %>

picture更改为@picture的关键。这样做的原因是您在控制器中声明@picture(实例变量),而不是picture(局部变量)。在控制器中的方法中声明和定义实例变量时,也可以在相应的视图中访问它。但是,在控制器中的方法中声明局部变量时,它在您的视图中不可用。

因此,即使你的在你的控制器方法中声明了picture而不是@picture,它也无法在你的视图中访问,因为它是一个局部变量。 / p>

有关五种类型的ruby变量的更多信息,请参阅this link