ruby on rails 4-更新模型参数的链接产生丢失或空值错误



我试图提供一系列链接,当选择这些链接时,将把相应的用户参数更新为链接提供的参数,而不呈现表单。我遇到的唯一问题是,当它调用更新方法时,我得到:param丢失或值为空:user

更新方法

 def update
@user = User.find(params[:id])
if @user.update(user_params)
  redirect_to list_path
  flash[:success] = "User updated"
else
  redirect_to list_path
  flash[:alert] = "User not updated"
end
end
private
def user_params
  params.require(:user).permit(:name, :email, :password,
                               :password_confirmation, :title, :role, :address, :phone)
end

链接至

<% User.all.each do |user| %>
        <% if user.role == "new" %>
      <tr>
        <td><%= user.name %></td>
        <td><%= user.title %></td>
        <td><%= user.role %></td>
        <td><%= link_to "Admin", update_user_path(id: user.id, :role => "admin"), :method => :put %> / <%= link_to "Moderator", '#' %> / <%= link_to "Member", '#' %> / <%= link_to "Other", '#' %></td>
      </tr>
        <% end %>
      <% end %>

参数检查

{"_method"=>"put",
"authenticity_token"=>"AUcV1swtGmRuDelTzLkbLd9Gmj6+phnHaSFRqrvDyETLoxNUQSaAgkes4ViWXoAZ33K5NZojVz9XdgIIsqJblA==",
"id"=>"2",
"role"=>"admin"}

根据我的发现,params.inspect在列出的所有参数之前都应该有类似[:user] =>的内容,但我不明白为什么没有,也无法成功地找到澄清的方法。

错误:
param丢失或值为空:user

def user_params     
  **params.require(:user).permit(:name, :email, :password,**
                               :password_confirmation, :title, :role, :address, :phone)
end
end

链接后记录选择

Started PUT "/update_user?id=4&role=admin" for 97.78.175.155 at 2015-06-30   15:51:47 +0000
Cannot render console from 97.78.175.155! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by UsersController#update as HTML
  Parameters: {"authenticity_token"=>"m+LcLOBL5NBXHQXD19o45/iV07/V1HiAXpykV+NiXIpRBtqubUB+Nn68DciNPaPT+KHwtPFRNnhgy/f16gPPWg==", "id"=>"4", "role"=>"admin"}
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 1]]
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 4]]
Unpermitted parameters: _method, authenticity_token, id
       (0.2ms)  begin transaction
          User Exists (0.2ms)  SELECT  1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('qwerty@poster.com') AND "users"."id" != 4) LIMIT 1
       (0.1ms)  rollback transaction
Redirected to https://rails-tutorial-hougthonbrad.c9.io/list
Completed 302 Found in 11ms (ActiveRecord: 0.7ms)

Started GET "/list" for 97.78.175.155 at 2015-06-30 15:51:47 +0000
Cannot render console from 97.78.175.155! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by UsersController#list as HTML
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 1]]
  User Load (0.5ms)  SELECT "users".* FROM "users"
  Rendered users/list.html.erb within layouts/application (3.4ms)
Completed 200 OK in 172ms (Views: 165.1ms | ActiveRecord: 0.7ms)

更新操作更改为以下内容。

def update
@user = User.find(params[:id])
if @user.update(user_params)
  redirect_to list_path
  flash[:success] = "User updated"
else
  redirect_to list_path
  flash[:alert] = "User not updated"
end
end

更新#1:

查看参数,您需要按如下方式更改user_params

def user_params
  params.require(:user).permit(:id, :name, :email, :password, :password_confirmation, :title, :role, :address, :phone)
end

更新#2:

尝试将您的link_to更改为以下

<%= link_to "Admin", update_user_path(user, user: {:id => user.id, :role => "admin"}), :method => :put %>

您的user_params中有params.require(:user)。该user散列通常由form_for生成。

我建议为您的用例呈现一个隐藏了除提交按钮之外的所有字段的表单。

相关内容

  • 没有找到相关文章

最新更新