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