为什么我的编辑表单是可查看的,而不是我的同一控制器的新表单?

时间:2016-05-09 16:45:33

标签: forms ruby-on-rails-4 nomethoderror nested-resources

如果我点击我的编辑链接,该链接就会生效,并转到我要编辑的特定图库的编辑表单。如果我点击同一控制器的新链接,我会收到以下错误:

    NoMethodError at /users/2/galleries/new
undefined method `galleries_path' for #<#<Class:0x007f4714fbac68>:0x000000060f32e0>
Did you mean?  gallery_path

我已经广泛寻找解决方案,但我不确定我做错了什么。这工作正常,直到我更新路线以使图库成为用户的嵌套资源。当我无法弄清楚如何解决这个问题时,我正在更新/更正我的链接和表单。

以下是我的路线,画廊/ _form,画廊/编辑,画廊/ _new,画廊控制器的一部分。

routes.rb    
resources :users, shallow: true do
        resources :galleries
        resources :images
        resources :albums
    end

galleries.html.erb
<h1>New Gallery</h1>

<%= render 'form' %>

<%= link_to 'Dashboard', user_path(current_user) %>

galleries/edit.html.erb
<h1>Update Gallery</h1>

<%= render 'form' %>

<%= link_to 'Dashboard', user_path(current_user) %>

galleries_controller.rb
def new
        @gallery = current_user.galleries.new
    end

    def create
        @gallery = current_user.galleries.build(gallery_params)
        respond_to do |format|
                if @gallery.save
                    format.html { redirect_to @gallery, notice: 'Gallery was successfully created.' }
                    format.json { render :show, status: :created, location: @gallery }
                else
                    format.html { render :new }
                    format.json { render json: @gallery.errors, status: :unprocessable_entity }
                end
            end
    end

    def show
    end

    def update
        if @gallery.update_attributes(gallery_params)
            flash[:success] = "Gallery Updated"
            redirect_to @gallery
        else
            render 'edit'
        end
    end
private

    def set_gallery
        @gallery = Gallery.find(params[:id])
    end

    def gallery_params
        params.require(:gallery).permit(:title, images_files: [])
    end

如果您需要我更多信息,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我最终没有使用1个表单进行编辑和新编辑。我制作了两个单独的表单,违反了DRY原则,但让我的应用程序工作,所以我可以继续前进。