2

我想在驗證失敗的用戶消息傳遞時維護一個漂亮的URL。使用嵌套路徑呈現錯誤

我有一個路由文件看起來像以下:

# For logged users convenience 
    #    example.com/messages 
    # instead of: example.com/users/:user_id/messages 
    map.resources :messages 

    # For everyone else 
    map.resources :users do |p| 
    p.resources :messages 
    end 

所以new_user_message_path(@user)回報:

/users/:user_id/messages/new 

消息的new.erb觀點產生正確的代碼:

<form action="https://stackoverflow.com/users/:user_id/messages" ......... 

當驗證失敗s時,顯示形式錯誤,但呈現錯誤的行動:

<form action="/messages" ......... 

所以第二次在用戶提交表單中的「創建」方法無法找到USER_ID

這裏是我的控制方法:

def new 
    @user = User.find(params[:user_id]) 
    @message = @user.messages.build 
    end 

    def create 
    @user = User.find(params[:user_id]) 
    @message = @user.messages.new(params[:message]) 

    if @message.save 
     flash[:notice] = 'Message saved' 
     redirect_to user_url(@user) 
    else 
     render :action => "new" # Here is the problem I guess 
    end 
    end 

我的表單視圖:

<% form_for [@user, @message] do |f| %> 
    <%= f.error_messages %>  
    Name:<%= f.text_field :name %> 
    Email:<%= f.text_field :email %> 
    Message:<%= f.text_area :body, :rows => 3 %> 
    <%= f.submit 'Send' %> 
<% end %> 
+0

我不明白你想要做什麼。通常情況下,消息在其他視圖中以其自己的路由呈現,因此沒有任何理由擁有消息路由,因此沒有理由需要該路由的漂亮URL。 – 2011-04-15 04:35:40

回答

4

嘗試

<% form_for [:user, @message] do |f| %> 
+0

其實可以使用:<%form_for [:user,@message] do | f | %> 請編輯您的答案以標記爲正確 – 2011-04-15 14:20:59