Form_for数据无法在自定义操作

时间:2015-10-23 10:46:41

标签: ruby-on-rails

我有一个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 =”

的记录

1 个答案:

答案 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 ...但似乎您只想为用户添加电话号码。要做到这一点,上面的代码就足够了。