2014-11-23 3 views
0

Я создал ресурс пользователя через curl POST, и я пытаюсь сгенерировать ответ с помощью http Location заголовок. Вот мой routes.rbrails newbie: при создании ресурса рендер: местоположение возвращает localhost: 3000/users.id вместо localhost: 3000/users/id

resources: :users, only [:index, :create, :show] 
# get 'users/:id', :to => 'users#view' # removed based on a suggestion 
post 'users', :to => 'users#create', :as => 'user' 

В users_controller (я пропустил код обработки исключений для упрощения кода

def create 
    user = User.create(name: params[:name]) 
    render :json => JSON.pretty_generate(user.as_json), :status => 200, content_type: 'application/json', location: user 
end 

Реагировать имеет странное HTTP расположение заголовка. User 10 идентифицирован в качестве пользователей. 10, а не пользователей/10

HTTP/1.1 201 Created 
Location: http://localhost:3000/users.10 

Как я могу генерировать заголовок расположения, как это?

HTTP/1.1 201 Created 
Location: http://localhost:3000/users/10 

Thx!

+0

user_path (пользователь) did not work? – Saravanan

+0

На самом деле вы можете заменить действие 'view' на' show' и использовать маршрут ресурса по умолчанию. –

+0

Saravanan, user_path() дал тот же результат (users.10). D-side, thx для предложения для маршрутов. Rb. –

ответ

1

Вот решение:

def create 
    user = User.create(name: params[:user]) 
    render :json => JSON.pretty_generate(user.as_json), :status => 200, content_type: 'application/json', location: url_for(user) # you did mistake here. 
end 

Я надеюсь, что это поможет!

+0

Я закончил создание url_for (пользователя) в контроллере. он работает, но не кажется правильным, что я должен жестко кодировать URL-адрес таким образом. def url_for (пользователь) "users /" + user.id.to_s end –

+0

Зачем вам нужен жесткий код? Url_for уже определен. – Rubyrider

+0

url_for() возвращает /users.10 вместо/users/10 –

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