2012-10-03 10 views
0

嗨我試圖使用一個窗體作爲我的albums控制器/模型的新/編輯視圖的一部分。然而,它給我的錯誤,當我嘗試編輯專輯:Rails:指定url的形式不能用作partial?

No route matches [PUT] "https://stackoverflow.com/users/22/albums"

我認爲這可能與做我的窗體的:url。當我提交它來創建相冊時,我的表單工作正常,但是當我嘗試編輯相冊時出現該錯誤。

我嘗試拿出我的表格中的url: user_albums_path,但當我嘗試創建新相冊時,它會給我一個錯誤。

No route matches [POST] "/albums"

有沒有什麼辦法讓這個表單同時適用於行動?我覺得這兩個操作中url:無法正確共存。

_form.html.erb

<%= form_for (@album), url: user_albums_path, :html => { :id => "uploadform", :multipart => true } do |f| %> 
<div class="formholder"> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 


    <%= f.label :description %> 
    <%= f.text_area :description %> 

    <br> 

    <%=f.submit %> 
</div> 
<% end %> 

專輯控制器

class AlbumsController < ApplicationController 

def index 
    @user = User.find(params[:user_id]) 
    @albums = @user.albums.all 

    respond_to do |format| 
    format.html 
    format.json { render json: @albums } 
    end 
end 

def show 
    @user = User.find(params[:user_id]) 
    @album = @user.albums.find(params[:id]) 
end 

def update 
    @user = User.find(params[:user_id]) 
    @album = @user.albums.find(params[:id]) 
    respond_to do |format| 
    if @album.update_attributes(params[:album]) 
     format.html { redirect_to user_album_path(@user, @album), notice: 'Album successfully updated' } 
    else 
     format.html { render 'edit' } 
    end 
    end 
end 

def edit 
    @user = User.find(params[:user_id]) 
    @album = @user.albums.find(params[:id]) 
end 

def create 
    @user = User.find(params[:user_id]) 
    @album = @user.albums.build(params[:album]) 
    respond_to do |format| 
    if @user.save 
     format.html { redirect_to user_album_path(@user, @album), notice: 'Album was successfully created.' } 
     format.json { render json: @album, status: :created, location: @album} 
    else 
     format.html { render action: "new" } 
     format.json { render json: @album.errors, status: :unprocessable_entity } 
    end 
    end 
end 

def new 
    @user = User.find(params[:user_id]) 
    @album = Album.new 
end 

def destroy 
end 

請幫助!

更新:

固定它!我自己!形式只是需要是<%= form_for([@user, @album])...

回答

1

嘗試

<%= form_for [@user, @album] %> 
# other arguments can be inserted before the closing brace 

這句法正確作用域資源航線

請記住,如果你需要一個有一個@album實例變量。你可以用@user.album.build

+0

建立一個空相冊,我最終自己想出來了!儘管這是正確的答案! – Edmund