Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 即使所有代码都与其他代码相同,Rails也无法创建_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 即使所有代码都与其他代码相同,Rails也无法创建

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 =

在我运行良好的应用程序中,我创建了另一个模型,Action。它的每一个代码都与其他保存得非常好的模型相同。但当我使用它创建时,我会得到以下错误:

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 %>