Ruby on rails 允许的rails参数:更新时为false

Ruby on rails 允许的rails参数:更新时为false,ruby-on-rails,Ruby On Rails,我有一个网站,用户有一个个人资料,可以添加一个艺术的个人资料和月开始,年开始,并在该艺术排名。我可以添加艺术,但我无法更新工作。我在“显示”页面上的“用户”文件夹中执行此操作。我在profile页面上呈现add_art表单,并将其提交给用户\u arts\u控制器的创建操作。对于edit_art,我尝试在用户内部使用edit.html.erb页面,它从@art_用户表中提取信息来填充字段,但当我提交时,它就像在更新一样,返回到设置页面并给出成功消息,但没有更新任何内容。我使用了byebug,它显

我有一个网站,用户有一个个人资料,可以添加一个艺术的个人资料和月开始,年开始,并在该艺术排名。我可以添加艺术,但我无法更新工作。我在“显示”页面上的“用户”文件夹中执行此操作。我在profile页面上呈现add_art表单,并将其提交给用户\u arts\u控制器的创建操作。对于edit_art,我尝试在用户内部使用edit.html.erb页面,它从@art_用户表中提取信息来填充字段,但当我提交时,它就像在更新一样,返回到设置页面并给出成功消息,但没有更新任何内容。我使用了byebug,它显示了所有参数,但表示允许:false

这是我的表格:

<% vars = request.query_parameters %>
<% @add = vars['add'] %>
<% if @add == "1" %>
  <% art = "Judo" %>
<% else %>
  <% art = "Brazillian Jiu Jitsu" %>
<% end %>
<div class="container">
  <div class="row center form">
    <div class="col-sm-12 col-md-10">
      <div class="card-panel">
        <h3>Edit <%= art %> info.</h3>
        <%= form_with(model: @art, url: art_edit_path(art_id: @add), class: "shadow p-3 mb-3 rounded text-dark", local: true) do |f| %>
          <div class="form-group row">
            <div class="col-md-3 col-sm-12 col-form-label">
              <%= f.label :month_started  %>:<span class="text-danger">*</span>
            </div>
            <div class="col-md-9 col-sm-12">
              <%= f.select :month_started, Date::MONTHNAMES[1..12], {prompt: true}, {class: 'form-control'} %>
            </div>
          </div>

          <diva class="form-group row">
            <div class="col-md-3 col-sm-12 col-form-label">
              <%= f.label :year_started  %>:<span class="text-danger">*</span>
            </div>
            <div class="col-md-9 col-sm-12">
              <%= f.select :year_started, Date.today.year-70 .. Date.today.year, {prompt: true, order: [:year]}, {class: 'form-control'} %>
            </div>
          </diva>
  
          <% @rank = Rank.where(art_id: @add) %>
          <div class="form-group row">
            <div class="col-md-3 col-sm-12 col-form-label">
              <%= f.label :rank  %>:<span class="text-danger">*</span>
            </div>
            <div class="col-md-9 col-sm-12">
              <%= f.collection_select :rank_id, @rank, :id, :rank, {:prompt=>true}, {:class=>'form-control'} %>
            </div>
          </div>

          <div class="form-group row text-right">
            <div class="col-md-8 col-sm-12"></div>
            <div class="col-md-4 col-sm-12">
              <%= f.submit (@add == "1" ? "Edit Judo" : "Edit Brazilian Jiu Jitsu"), class: "profile_btn" %>
            </div>
          </div>
        <% end %>
      </div>
    </div>
  </div>
</diva>
以下是我使用byebug并输入params时得到的结果:

(byebug) params
<ActionController::Parameters {"_method"=>"patch", "authenticity_token"=>"UY4RG1D0N0IHcJeyftn44WmAgsdslKJScD+GSJPbAUEEjlJLiYLd2htK4RBTfrP+YPUXP5EFB5pQc98OmQPPtg==", "user_art"=>{"month_started"=>"January", "year_started"=>"1988", "rank_id"=>"14"}, "commit"=>"Edit Judo", "art_id"=>"1", "controller"=>"user_arts", "action"=>"update"} permitted: false>
(byebug)
(byebug)参数
“补丁”、“真实性令牌”=>“用户艺术”=>“月开始”=>“一月开始”=>“年开始”=>“1988”、“排名id”=>“14”>“提交”=>“编辑柔道”、“艺术id”=>“1”、“控制器”=>“用户艺术”、“动作”=>“更新”}允许:错误>
(byebug)
非常感谢您的帮助


谢谢

我想您在允许参数的定义中有一个额外的
s
。既然你得到了这个:

"user_art"=>{"month_started"=>"January", "year_started"=>"1988", "rank_id"=>"14"}
您应该通过以下方式进行检查:

def art_params 
  params.require(:user_art).permit(:user_id, :art_id, :month_started, :year_started, :rank_id)
end
最后一点意见。看看你允许的参数,我想
user\u id
不应该是其中之一


让我知道它是否有效

我想您在允许参数的定义中有一个额外的
s
。既然你得到了这个:

"user_art"=>{"month_started"=>"January", "year_started"=>"1988", "rank_id"=>"14"}
您应该通过以下方式进行检查:

def art_params 
  params.require(:user_art).permit(:user_id, :art_id, :month_started, :year_started, :rank_id)
end
最后一点意见。看看你允许的参数,我想
user\u id
不应该是其中之一


让我知道它是否有效

在调试时能否共享
params
变量内容?对此表示抱歉。我打算包括这一点。我编辑了问题并添加了它。在调试时,您能否共享
params
变量内容?很抱歉。我打算包括这一点。我编辑了问题并添加了它。谢谢,但我仍然被允许:false。我想你是对的,我只是在用户id不起作用的时候才添加了它,但我把它拿出来并从用户id中删除了额外的x,但它仍然是一样的。关于
用户id
的事情只是为了安全。如果运行
@user\u art.update会发生什么!(艺术参数)
而不是你的更新声明?控制台中是否出现异常?(我知道这不是你想要的行为,但这只是为了检查)奇怪的是,如果我使用@user_art.update(art_params),它仍然说允许:如果我使用byebug,则为false,但仍然有效。我要了。非常感谢你的帮助。谢谢,但我还是被允许了:错。我想你是对的,我只是在用户id不起作用的时候才添加了它,但我把它拿出来并从用户id中删除了额外的x,但它仍然是一样的。关于
用户id
的事情只是为了安全。如果运行
@user\u art.update会发生什么!(艺术参数)
而不是你的更新声明?控制台中是否出现异常?(我知道这不是你想要的行为,但这只是为了检查)奇怪的是,如果我使用@user_art.update(art_params),它仍然说允许:如果我使用byebug,则为false,但仍然有效。我要了。非常感谢你的帮助。