无法使用update_attributes更新用户配置文件

时间:2016-06-14 14:06:17

标签: ruby-on-rails ruby

对于我的生活,我不知道发生了什么。我正在使用Rails 5和React。我似乎无法更新我的个人资料。

更新路线:

/users/:user_id/profile(.:format)   profiles#update

在我的反应组件中,表单为:

<form data-abide="" encType="multipart/form-data" action={url} method="patch">
  <input type="text" name="profile[first_name]" value={this.state.firstName}/>
  <button className="button expanded" type="submit">Update</button>
</form>

如果我将表单方法设置为“post”,则会转到create方法并替换我不需要的列,因此我将其更改为patch

个人资料控制器:

...
skip_before_filter  :verify_authenticity_token # The only way to get this to work with React


def create
  @profile = current_user.build_profile(profile_params)
  if @profile.save
   #...
  else
   #...
  end
end

def update
  @profile = current_user.profile
  if @profile.update_attributes(profile_params)
    #...
  else
    #...
  end
end

private
 def profile_params
  params.require(:profile).permit(:first_name)
 end

...

有什么不对吗?

修改

我让它工作,我将表单方法设置为post然后:

def create
  update
end

有没有办法让表单直接调用update方法?与注释一样,表单仅支持GET / POST而不支持PATCH。

2 个答案:

答案 0 :(得分:1)

制作表单方法 POST ,在表单中添加一个隐藏字段:

<input type="hidden" name="_method" value="patch" />

这是Rails在您使用表单助手时所做的事情(请参阅http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html),并将覆盖实际用于提交表单的方法。

答案 1 :(得分:0)

如果您在路径文件中将配置文件定义为资源,则可以从表单访问此资源。

profiles / edit.html.erb

<%= form_for @profile do |f| %> # Additionally can add method: :patch
# your fields
<% end %>

在控制器中

def edit
    @profile = current_user.profile
end

def update
  @profile = Profile.find(params[:id])
  if @profile.update_attributes(profile_params)
    flash[:notice] = "Your profile has been saved!"
    render some page
  else
    flash[:notice] = "Your profile has not been saved!"
    render or redirect some page
  end
end

在我看来,您应该检查您的个人资料是否正确更新。使用

 @profile.errors

希望这会有所帮助。