对于我的生活,我不知道发生了什么。我正在使用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。
答案 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
希望这会有所帮助。