2010-11-12 300 views
1

我有一組嵌套的資源 - :用戶和:消息。路由和嵌套資源

resources :users, :only => [:show,:index] do 
    resources :messages 
    end 

而且也爲消息模式「new.html.haml」模板formtastic形式,它需要使用這些資源:

=semantic_form_for [@user,@message] do |f| 
=f.input :title 

的問題是,在實際操作路徑從[@用戶,@消息]生成的,它看起來像這樣:

/users/4cdc7f9dfae434029a0000aa/messages 

這是錯誤的,因爲我使用了一個名爲路線,所以這應該看起來像「/用戶/暱稱/郵件」

如何確保@user生成正確的路徑輸出?

編輯:這是我使用slugify用戶的路線名稱。

match "https://stackoverflow.com/users/:nickname/messages" => "messages#index" 
    match "https://stackoverflow.com/users/:nickname/messages/new" => "messages#new", :as=>:new_message 
    match "https://stackoverflow.com/users/:nickname/messages" => "messages#create", :as=>:create_message 

回答

4

我想你想要的是使用暱稱作爲URL蛞蝓。你需要的只是常規的嵌套資源;

# in routes.rb 

resources :users do 
    resources :messages 
end 

這將使你同樣的路線,除了他們將有:id而不是:nickname在那裏。

現在的實際技巧,讓您使用用戶的暱稱作爲URL標識:

# user.rb 

class User < ActiveRecord::Base 
    def to_param 
    self.nickname 
    end 
end 

你會自動獲得在URL中的暱稱,並把它傳遞給你的控制器爲params[:id],所以你必須在您的控制器中採取相應措施

# users_controller.rb 
… 
def show 
    @user = User.find_by_nickname(params[:id]) 
end 
… 
0

這應該做的伎倆

=semantic_form_for :message, :url => create_message_path(:nickname => @user.nickname) do |f| 
    # ...