我有一个form_for @user
来更新用户模型中的列
我给了html方法作为get并提交给行动看起来像
@user = User.find(params[:id])
@user_update_attribute(:phno,params[:phno])
并且看起来像
<%= form_for :@user, url: addphno_addphno_path , html: { method: :get } %>
问题是我无法在控制器操作中获取数据。错误是
无法找到“id =”
的记录
答案 0 :(得分:0)
如果你想要一个单独的“phoneno”动作:
#config/routes.rb
resources :users do
match :addphone, via: [:get, :post]
end
#app/views/users/add_phone_no.html.erb
<%= form_for @user, user_addphone_path(@user) do |f| %>
<%= f.text_field :number %>
<%= f.submit %>
<% end %>
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def addphone
@user = User.find params[:id]
@user.update( update_params ) if request.post?
end
private
def update_params
params.require(:user).permit(:phno)
end
end
如果您想使用update
操作(按惯例):
#config/routes.rb
resources :users
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def edit
@user = User.find params[:id]
end
def update
@user = User.find params[:id]
@user.update user_params
end
private
def user_params
params.require(:user).permit(:phno)
end
end
这将允许您致电:
#app/views/users/edit.html.erb
<%= form_for @user do |f| %>
<%= f.text_field :phno %>
<%= f.submit %>
<% end %>
一句话是,如果您要更新@user
对象, 应该使用第二批代码。
我原本以为您想要将电话号码作为关联数据添加到@user
...但似乎您只想为用户添加电话号码。要做到这一点,上面的代码就足够了。