Ruby on rails 即使所有代码都与其他代码相同,Rails也无法创建
在我运行良好的应用程序中,我创建了另一个模型,Action。它的每一个代码都与其他保存得非常好的模型相同。但当我使用它创建时,我会得到以下错误:Ruby on rails 即使所有代码都与其他代码相同,Rails也无法创建,ruby-on-rails,ruby,Ruby On Rails,Ruby,在我运行良好的应用程序中,我创建了另一个模型,Action。它的每一个代码都与其他保存得非常好的模型相同。但当我使用它创建时,我会得到以下错误: undefined method `permit' for "create":String 并突出显示控制器中的参数: def action_params params.require(:action).permit(:text) end 我的创建方法: def create @club =
undefined method `permit' for "create":String
并突出显示控制器中的参数:
def action_params
params.require(:action).permit(:text)
end
我的创建方法:
def create
@club = Club.find(params[:club_id])
@action = @club.actions.build(action_params)
@action.club_id = @club.id
if @action.save
redirect_to club_path(@club)
else
redirect_to club_path(@club), alert: "Please make sure to type at least 1 character."
end
end
行动模式:
belongs_to :user
belongs_to :club
has_many :outcomes
观点:
<%= form_for([@user, @club, @action]) do |f| %>
<container style="max-width:300px;display:block;margin-left:auto; margin-right:auto; margin-bottom:100px;">
<div>
<%= f.text_area :text, class:'uk-textarea', style:"max-height: 130px;", placeholder:'' %>
</div>
<div>
<%= f.submit "Post", class:'uk-button uk-text-capitalize', style:" margin-top:10px; " %>
</div>
</container>
<% end %>
这里的问题是,您与Rails中的核心概念存在命名冲突。在Rails中,在控制器上调用的方法名为
action
,参数散列始终包含controller
和action
键,当路由器中间件将请求与控制器匹配时,这些键被添加到请求中。这实际上覆盖了表单发送的传入参数
最简单的解决方案是为您的模型找到另一个名称,或者将您的模型放在一个模块中,该模块可以更改生成参数键等内容的方式:
module Foo
class Action
include ActiveModel::Model
end
end
puts Foo::Action.naming.param_key # "foo_action"
您还可以使用as
选项覆盖表单中的参数键,用于:
# ...
或使用的
表单_的范围选项。但是我想问的是,仅仅修补这个问题是否真的是一个好主意,因为这个命名问题很可能会产生无尽的bug。请将您的参数添加到您的问题中。您将看到一个键action
,其值为create
,这是创建路线的标准值。@jvillian添加了我看到的内容,但不确定这是否是您的意思。我可以再试一次;除非你不想玩得开心,否则不要给你的模型命名为Action或Controller。这是一个很棒的答案。非常感谢你!
module Foo
class Action
include ActiveModel::Model
end
end
puts Foo::Action.naming.param_key # "foo_action"
<%= form_for([@user, @club, @action], as: :foo) do |f| %>
# ...
<% end %>