2010-06-02 6 views
0

У меня есть именованный маршрут вроде следующего:Рельсы комплекс маршрутизации, проще именованные маршруты хелперы

map.with_options :path_prefix => '/:username', :controller => 'questions' do |q| 
    q.question '/:id', :action => 'show', :conditions => { :method => :get } 
end 

Теперь для создания URL на конкретный вопрос, я должен написать

question_path(:id => @question.id, :username => @question.user.username) 

Что довольно громоздкий. Я хотел был бы иметь возможность написать

question_path(@question) 
# or even 
link_to 'Question', @question 

и получить желаемый результат.

Как это возможно? Я предполагаю, что для этого я должен перезаписать помощника по умолчанию.

ответ

1

Вы можете использовать question_path(@question.user.username, @question)

Или вы можете написать вспомогательный метод:

def user_question_path(question) 
    question_path(question.user.username, question) 
    end 

И использовать user_question_path(@question)

1

Это швы, как будто вы хотите вложенный маршрут для пользователей/вопрос.

map.resource :users do |user| 
    map.resources :question, :shallow => true 
end 

Таким образом, у вас есть доступ к вопросам пользователей с/пользователями/1/вопросов, но вы по-прежнему может/вопросы/1 к конкретному вопросу.

+0

Дело в том, мой URL выглядит следующим образом: имя пользователя /: question_id, и я думаю, что это Безразлично Для этого не работай. Было ли решение, которое вы предложили, даже упростило создание URL-адресов? – fphilipe

+1

Зачем вам этот URL? Это запрос клиента? Если нет, я настоятельно рекомендую использовать соглашение для маршрутов в рельсах, которые были бы в вашем примере, например, как/users /: user_id/questions /: id – robertokl

+0

Я хочу его в этом формате, потому что/users /: user_id/questions /: id слишком длинный, и я даже показываю заголовок заголовка после id так что-то вроде: '/ john/425-whats-going-on' – fphilipe

Смежные вопросы