【发布时间】:2014-02-28 08:08:41
【问题描述】:
尝试将 2 个属性更新为 User 模型,这是我在 Users 控制器中的当前代码:
def update
@user = User.find(params[:id])
if @user.update_attributes(songkickID: params[:user][:songkickID], jamID: params[:user][:jamID])
redirect_to @user
else
redirect_to @user
end
end
将 Songkick ID 和 Jam ID 输入到 2 个不同的字段中。但是,使用当前代码,如果我尝试自行更新 Jam ID,它会更新该属性,但随后会重定向到用户页面(如预期的那样),其中 Songkick ID 现在为零。再次输入 Songkick ID 后,Jam ID 变为 nil。我想这是因为它们都是控制器中相同 if 语句的一部分?
我尝试为 jamID 参数使用 elsif,但它似乎根本无法识别(即不会为用户更新该属性)。也尝试过||条件运算符。
编辑:这是两种不同的形式:
<%= form_for(@user) do |f| %>
<%= f.text_field :jamID, :id=>"jamURL" %>
<%= f.submit "Jam ID", :onclick => "changeImg()", id: "saveJam" %>
<% end %>
和
<%= form_for(@user) do |f| %>
<%= f.text_field :songkickID %>
<%= f.submit "Songkick ID", :type => :image, :src => image_path("songkicklogo.png"), id: "skLogo" %>
<% end %>
我尝试将代码修改为 update_column,但我得到的参数数量错误(1 比 2)。
编辑 2:按照 Hartl 的 Rails 教程中的布局,我尝试这样做来定义强参数:
private
def user_params
params.require(:user).permit(:songkickID, :jamID)
end
但我仍然收到禁止属性错误?
编辑 3:以下代码通过,但我担心它不符合 Rails 4 强参数:
控制器:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def edit
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:songkickID, :jamID)
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to @user
else
redirect_to @user
end
end
end
如果我将更新移动到更新方法下方,我会收到 user_params 的未定义变量/方法错误,并且我无法将其设为私有。
【问题讨论】:
-
我想我不完全明白你在问什么。是否要更新这两个属性?你能告诉我们设置这些值的表单吗?
-
你有什么理由要创建两个不同的表单吗?因为如果你想同时更新这两个属性,它们应该在同一个
-
两种不同的形式,因为我不希望它们同时更新(songkick ID 是一次性的,Jam ID 会经常更新)。
标签: ruby-on-rails params update-attributes