gpt4 book ai didi

ruby-on-rails-4 - Rails 4、强参数、嵌套资源、构建和未定义方法允许

转载 作者:行者123 更新时间:2023-12-01 15:36:35 26 4
gpt4 key购买 nike

我无法获得 Rails 4,强大的参数无法通过构建处理嵌套资源。任何建议都将非常受欢迎。

RSPEC 向我展示

创建 Action 创建 Action 失败/错误:click_button“创建操作” 没有方法错误: 未定义的方法 permit' for "create":String
# ./app/controllers/actions_controller.rb:24:in
action_params' # ./app/controllers/actions_controller.rb:10:in create'
# ./spec/features/creating_actions_spec.rb:16:in
'

中的 block (2 级)

我的浏览器显示:

ActionsController 中的 NoMethodError#create“创建”的未定义方法“允许”:字符串

提取的源代码(大约第 24 行):

def action_params params.require(:action).permit(:title, :description) 结束

Action Controller 包含:

def create
@action = @project.actions.build(action_params)
if @action.save
flash[:notice] = "Action has been created."
redirect_to [@project, @action]
else
flash[:alert] = "Action has not been created."
render "new"
end
end
private

def action_params
params.require(:action).permit(:title, :description)
end

我正在使用嵌套资源:

resources :projects do
resources :actions
end

表格如下:

<%= form_for [@project, @action] do |f| %>
<% if @action.errors.any? %>
<div id="error_explanation" >
<h2><%= pluralize(@action.errors.count, "error") %>
prohibited this action from being saved:</h2>

<ul>
<% @action.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>

<p>
<%= f.label :description %><br>
<%= f.text_area :description %>
</p>
<%= f.submit %>
<% end %>

最佳答案

发生这种情况是因为 Rails 默认发送 :action包含请求的操作的参数。当你做 params.require(:action)您实际上是以字符串形式返回所请求操作的名称,在本例中为 create。你可以明确地告诉 form_for为散列使用另一个 key ,解决强参数问题:

<%= form_for [@project, @action], as: :foo do |f| %>

在你的 Controller 中:

params.require(:foo).permit...

关于ruby-on-rails-4 - Rails 4、强参数、嵌套资源、构建和未定义方法允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com