我使用omniauth-twitter在我的rails应用程序中创建和验证用户,并且我成功地从Twitter,头像,用户名,描述等中获取了我需要的所有内容。但我还是喜欢让用户添加自定义字符串以在其帐户页面上显示。
我在User表中添加了一列并运行了迁移。专栏就在那里。
但是,我似乎无法让更新表单正常工作。我没有看到错误。我只是刷新页面。由于我没有现有的表单或控制器方法,所以我手动添加它们。这是我的用户控制器(我使用的是友好ID,希望不会抛弃你。)
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.friendly.find(params[:id])if params[:id]
end
def edit
@user = User.friendly.find(params[:id])if params[:id]
end
def update
@user = User.friendly.find(params[:id])if params[:id]
end
private
def user_params
params.require(:user).permit(:custom_text)
end
end
我不确定我是否需要编辑和更新方法,但我想我会尝试。
这是我的表单(SLIM模板),我将其包含在用户的展示页面中:
= form_for @user do |f|
= f.text_field :custom_text
= f.submit
提交按钮可以正常工作,但没有更新。
我很确定我只是忽略了一些非常明显的事情。
答案 0 :(得分:3)
I can't seem to get the update form to work, however. I'm not seeing errors.
没有任何内容会更新,因为您首先没有更新任何内容。根据{{1}}操作中的当前代码,它只是从数据库中选择要更新的记录,但不对其执行任何操作。
update
要更新提取的记录,您应该在 def update
@user = User.friendly.find(params[:id])if params[:id] ## Simply selecting
end
model 的实例上调用 update or update_attributes
方法,将属性值更改为方法。
在User
中使用以下更新代码。通过添加名为UsersController
的{{1}}回调,我还可以干掉代码。在执行before_action
,set_user
和set_user
等操作之前,每次都会调用show
方法,并负责设置实例变量edit
。
update
答案 1 :(得分:0)
您是否尝试更改表单代码以将multipart:true
设置为允许发送文件
试试这个,然后上传照片
= form_for @user,html: {multipart: true} do |f|
= f.file_field :custom_photo
= f.submit
答案 2 :(得分:0)
我可能也会在Rails 4中遗漏一些非常明显或新的东西,但您似乎应该告诉数据库更新您的记录:
def update
@user = User.friendly.find(params[:id]) if params[:id]
@user.update_attributes(user_params) if @user
end
private
def user_params
params.require(:user).permit(:custom_text)
end
在update
行动中没有第二行,它只是找到记录而没有做任何事情......