Их множество, особенно для Rails 4.0 и Rails 3.x. Я новичок во вложенной маршрутизации, и мне это очень сложно, особенно с формами.
Итак, у меня есть следующее:
Маршруты
resources :users do
resources :api_keys, path: '/developmentcenter'
end
Связь здесь следующая: у пользователя много ключей API, где ключ API принадлежит пользователю.
Контроллер
class ApiKeysController < ApplicationController
before_action :authenticate_user!
def new
@user = User.find(params[:user_id])
@api_key = ApiKey.new(:user => @user)
end
def index
@user = User.find(params[:user_id])
@api_key = @user.api_keys
end
def create
@user = User.find(params[:user_id])
@api_key = ApiKey.new(create_new_api_key)
create_api_key(@api_key, @user)
end
def destroy
@user = User.find(params[:user_id])
destroy_api_key(@user)
end
private
def create_new_api_key
params.permit(:api_key, user_attributes: [:id])
end
end
Вышеизложенное довольно просто. create_api_key
— это метод, который делает что-то при сохранении или делает что-то еще при неудачном сохранении. В то время как destroy_api_key
Просто найдите ключ API на основе идентификатора пользователя и удалите его, что-то сделает в случае успеха и что-то в случае неудачи.
Итак, теперь давайте создадим форму, которая имеет одну кнопку для создания ключа API.
<h2>Create a new Key</h2>
<%= form_for ([@user, @api_keys]) do |f| %>
<p class="button"><%= f.submit "Generate API Key" %></p>
<% end %>
Все, что нам нужно, это одна кнопка отправки, которая при нажатии создает новый ключ API для вошедшего в систему пользователя.
Но подождите, у нас есть ошибка:
First argument in form cannot contain nil or be empty
Эта ошибка возникает по адресу:
<%= form_for ([@user, @api_keys]) do |f| %>
Итак, я просмотрел каждый из вопросов стека (ну, большинство), которые касаются этой ошибки, я изменил свой контроллер на основе нескольких, на то, что вы видите выше. Я даже просмотрел документы помощников формы в руководстве по рельсам.
Я не могу понять это.