Ruby on rails 4 Rails 4.1用户名和头像赢得';救不了

Ruby on rails 4 Rails 4.1用户名和头像赢得';救不了,ruby-on-rails-4,paperclip,avatar,Ruby On Rails 4,Paperclip,Avatar,好的。。。我有一个非常。。。非常奇怪的问题。当创建一个新用户时,由于一些奇怪的原因,它不会保存用户名或头像。。。但只有当他们使用电子邮件注册时。当他们在Facebook上做同样的事情时。。。用户和化身工作正常。下面是日志中的粘贴: Parameters: {"utf8"=>"â", "authenticity_token"=>"QDa9azqwenwcyCWPaYWohDDgSRBST3eCRTcagky984=", "user"=>{"ip_address"=>"77.

好的。。。我有一个非常。。。非常奇怪的问题。当创建一个新用户时,由于一些奇怪的原因,它不会保存用户名或头像。。。但只有当他们使用电子邮件注册时。当他们在Facebook上做同样的事情时。。。用户和化身工作正常。下面是日志中的粘贴:

Parameters: {"utf8"=>"â", "authenticity_token"=>"QDa9azqwenwcyCWPaYWohDDgSRBST3eCRTcagky984=", "user"=>{"ip_address"=>"77.777.77.777", "name"=>"Jim Beam", "email"=>"jim@example.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x00000008d7a048 @tempfile=#<Tempfile:/tmp/RackMultipart20140827-9443-132d9ai>, @original_filename="joker bench.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"joker bench.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"Sign up"}
Redirected to http://example.com/
Completed 302 Found in 599ms (ActiveRecord: 216.3ms)
Started GET "/" for 77.185.98.140 at 2014-08-27 14:51:31 +0000
Processing by DailiesController#index as HTML
  Rendered dailies/index.html.erb within layouts/application (21.2ms)
Completed 200 OK in 131ms (Views: 110.7ms | ActiveRecord: 19.6ms)
Started GET "/images/thumb/missing.png" for 77.185.98.140 at 2014-08-27 14:51:31 +0000

ActionController::RoutingError (No route matches [GET] "/images/thumb/missing.png"):
参数:{“utf8”=>“A”,“Authentity_token”=>“QDA9AZQWENWCYCWPAYWOHDDGSRBST3ECRTAGKY984=”,“user”=>{“ip地址”=>“77.777.77.777”,“姓名”=>“Jim Beam”,“电子邮件”=>“jim@example.com“,“密码”=>“[过滤]”,“密码确认”=>“[过滤],“化身”=>,“提交”=>“注册”}
重定向到http://example.com/
599毫秒内完成302次(ActiveRecord:216.3毫秒)
2014年8月27日14:51:31+0000时开始获取77.185.98.140的“/”
DailiesController#将索引作为HTML进行处理
布局/应用程序中的渲染日报/index.html.erb(21.2ms)
在131ms内完成200 OK(视图:110.7ms |活动记录:19.6ms)
2014年8月27日14:51:31+0000开始获取77.185.98.140的“/images/thumb/missing.png”
ActionController::RoutingError(没有与[GET]匹配的路由“/images/thumb/missing.png”):
正如你所看到的,名字和图片都被很好地接收到了。。。但是它们不会保存到数据库中。他们只是不在那里。这听起来像是模型中的一个问题,对吗

class User < ActiveRecord::Base
  has_merit

  acts_as_voter
  acts_as_messageable
  devise :database_authenticatable, :registerable, 
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :email, :password, :password_confirmation, :provider, :uid, :name, :remember_me, :avatar, :ip_address, :latitude, :longitude, :avatar, :avatar_file_name, :avatar_content_type, :avatar_file_size, :avatar_updated_at, :country, :current_sign_in_ip, :id
 has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
  validates_attachment_content_type :avatar, :content_type => /\Aimage/
def self.from_omniauth(auth)
  where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
    user.provider = auth.provider
    user.uid = auth.uid
    user.ip_address = user.current_sign_in_ip
    user.email = auth.info.email || "#{auth.uid}@facebook.com"
    user.password = user.password_confirmation || SecureRandom.urlsafe_base64(n=6)
    if auth.provider == "facebook"
      user.name = auth.info.name      
      if auth.info.image.present?
        avatar_url = process_uri(auth.info.image)
        user.update_attribute(:avatar, URI.parse(avatar_url))
      end         
    else      
      user.oauth_token = auth.credentials.token
      user.oauth_expires_at = Time.at(auth.credentials.expires_at)
    end
    user.save
  end
end  
class用户{:medium=>“300x300>”,:thumb=>“100x100>”},:default\u url=>“/images/:style/missing.png”
验证\u附件\u内容\u类型:头像,:内容\u类型=>/\Aimage/
定义自授权(授权)
其中(auth.slice(:provider,:uid)).first_或_initialize.tap do|user|
user.provider=auth.provider
user.uid=auth.uid
user.ip\u address=user.current\u sign\u in\u ip
user.email=auth.info.email | |“#{auth.uid}@facebook.com”
user.password=user.password|u确认| SecureRandom.urlsafe_base64(n=6)
如果auth.provider==“facebook”
user.name=auth.info.name
如果auth.info.image.present存在?
化身url=进程uri(auth.info.image)
user.update_属性(:avatar,URI.parse(avatar_url))
终止
其他的
user.oauth_token=auth.credentials.token
user.oauth\u expires\u at=Time.at(auth.credentials.expires\u at)
终止
user.save
终止
终止
正如你所看到的:“:name”和“:avatar”一样是一个可访问的属性,据我所知,它们的设置都是正确的,因为它在Facebook上运行得很好。那么,为什么不把它们保存给电子邮件用户呢?也许控制器是对的

这是控制器:

class UsersController < ApplicationController
  before_filter :authenticate_user!
  before_filter :correct_user?, :except => [:index, :show]
  before_filter :ip_address


  def ip_address
 #   @user.ip_address = request.remote_ip
  end

  def index
    @users = User.all
  end

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    @user.ip_address = request.remote_ip
    if @user.update_attributes(params[:user])
      redirect_to @user
    else
      render :edit
    end
  end


  def show
    @user = User.find(params[:id])
    correct_user = @user
  end

end
class UsersController[:index,:show]
前\u筛选器:ip\u地址
def ip_地址
#@user.ip_address=request.remote_ip
终止
def索引
@users=User.all
终止
定义编辑
@user=user.find(参数[:id])
终止
def更新
@user=user.find(参数[:id])
@user.ip\u地址=request.remote\u ip
如果@user.update_属性(参数[:user])
将_重定向到@user
其他的
渲染:编辑
终止
终止
def秀
@user=user.find(参数[:id])
正确的用户=@user
终止
终止
不明白。。。不知道问题出在哪里。当有人回答我的问题时,我可能已经弄明白了,但我至少想问一下。我们知道表单(我使用的是Deave)工作正常,因为我们可以看到它试图在日志中保存名称和头像

不管怎样,如果你能想出什么办法,请告诉我


编辑:找到了缺少的拇指,但当用户试图上传图片或保存用户名时,它仍然不起作用。它保存用户id、电子邮件地址和密码。。。那么,为什么它不保存名称呢?

最后没有那么复杂。。。我应该知道:

  • 如果它适用于Facebook登录(omniauth),但不适用于常规用户登录(Desive)
  • …那么这一定是个精心设计的问题
  • 应用程序\u controller.rb

    before_action :configure_devise_permitted_parameters, if: :devise_controller?
    
     protected
    
      def configure_devise_permitted_parameters
        registration_params = [:name, :ip_address, :avatar, :email, :password, :password_confirmation]
    
        if params[:action] == 'update'
          devise_parameter_sanitizer.for(:account_update) {
            |u| u.permit(registration_params << :current_password)
          }
        elsif params[:action] == 'create'
          devise_parameter_sanitizer.for(:sign_up) {
            |u| u.permit(registration_params)
          }
        end
      end
    
    
    end
    
    在\u操作之前:配置\u设计\u允许的\u参数,如果::设计\u控制器?
    受保护的
    def配置\u设计\u允许的\u参数
    注册参数=[:姓名、ip地址、头像、电子邮件、密码、密码确认]
    如果参数[:操作]=“更新”
    为(:帐户更新)设计\u参数\u消毒剂{
    |美国许可证(登记参数)