向omniauth生成/现有用户添加可编辑字段

时间:2014-04-12 22:00:48

标签: ruby-on-rails-4 omniauth

我使用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

提交按钮可以正常工作,但没有更新。

我很确定我只是忽略了一些非常明显的事情。

3 个答案:

答案 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_actionset_userset_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行动中没有第二行,它只是找到记录而没有做任何事情......