【发布时间】:2013-12-14 18:58:27
【问题描述】:
其中有很多,尤其是 Rails 4.0 和 Rails 3.x。我是嵌套路由的新手,我发现它非常困难,尤其是表单。
所以我有以下内容:
路线
resources :users do
resources :api_keys, path: '/developmentcenter'
end
这里的关系是:user有很多api key,其中api key属于user。
控制器
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只要根据用户id找到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| %>
所以 - 我已经查看了处理这个错误的每一个堆栈问题(大多数),我已经根据一些改变了我的控制器,就像你在上面看到的那样。我什至查看了 rails 手册中的表单助手文档。
我想不通。
【问题讨论】:
标签: forms ruby-on-rails-4 nested-routes