我正在构建一个市场应用程序(rails 4),卖家可以列出要销售的商品。我有一个卖家资料表单,用户可以在其中输入有关其品牌的详细信息
我无法通过用户输入更新记录。表单提交时没有任何错误,但模型未更新。
以下代码。在http://mktdemo.herokuapp.com/seller/18进行演示(登录:test@test.com / pwd:test1234)
路线:
match "/seller/:id", to: "users#sellerprofile", via: [:get, :put], as: :sellerprofile
我的表格:
<%= form_for(@user, url: sellerprofile_path(id: current_user.id), method: :put, html: { :class => 'edit_profile', :multipart => true }) do |f| %>
<div class="form-group">
<%= f.label :your_story %><i> (required)</i>
<%= f.text_area :profilestory, class:"form-control" %>
</div>
<div class="form-group">
<%= f.label :profile_image %><i> (required)</i>
<%= f.file_field :profileimage, class:"form-control" %>
</div>
<div class="form-group">
<%= f.submit class:"btn btn-primary" %>
</div>
<% end %>
user_controller:
def sellerprofile
@user = User.find(params[:id])
@user.update_attributes(:profilestory => params[:profilestory], :profileimage => params[:profileimage])
end
对于图像,我使用了回形针,并在我的模型中使用了has_attached ...代码。
更新 这是我在控制器中的user_params:
def user_params
params.require(:user).permit(:bankaccname, :profileimage, :profilestory)
end
当我在sellerprofile方法中使用@user.update(user_params)
时,我得到params :user not found error
。加载表单时出现此错误(不提交)。错误在第params.require(:user)
行
更新2: 这是更新方法。我将此用于另一个接收某些银行帐户数据的表单,因此我不确定是否可以为个人资料表单修改此内容。
def update
@user.attributes = user_params
Stripe.api_key = ENV["STRIPE_API_KEY"]
token = params[:stripeToken]
recipient = Stripe::Recipient.create(
:name => user_params["bankaccname"],
:type => "individual",
:bank_account => token
)
@user.recipient = recipient.id
respond_to do |format|
if @user.save
format.html { redirect_to edit_user_url, notice: 'Your account was successfully updated.' }
else
format.html { render action: 'edit' }
end
end
end
答案 0 :(得分:1)
如果你看一下你的问题,就说:
当我在sellerprofile方法中使用@ user.update(user_params)时,我得到一个参数:用户未找到错误。加载表单(而不是提交)
时会发生此错误
这一行告诉我们在您的表单呈现的操作中有错误。我的意思是您在浏览器地址栏中显示的网址以显示您的表单
在您的评论中,您告诉我,呈现表单的网址为/seller/:id
,现在让我们查看您的表单代码
<%= form_for(@user, url: sellerprofile_path(id: current_user.id), method: :put, html: { :class => 'edit_profile', :multipart => true }) do |f| %>
注意表格中使用的网址?您使用相同的操作来呈现表单,然后在提交表单后再次将您带到错误的相同操作。你应该做两个不同的路线。一个用于渲染表单,另一个用于创建表单。要进一步解释,如果你看一下你的代码
def sellerprofile
@user = User.find(params[:id])
@user.update_attributes(user_params)
end
因此,当您点击/seller/:id
时,它会将您带到sellerprofile方法,因此您的vendorprofile方法中的代码会启动并尝试更新您的用户,因为此行@user.update_attributes(user_params)
但没有user_params,因为你没有提交任何表格,所以你得到一个参数:用户找不到错误
<强>修正:强>
只需制作两个不同的路线,一个用于渲染表单,另一个用于创建记录:
match "/seller/:id/new", to: "users#sellernew", via: [:get], as: :sellernewprofile
match "/seller/:id", to: "users#sellerprofile", via: [:put], as: :sellerprofile