2016-08-04 65 views
0

我使用gem 'firebase'并从firebase获取数据。我可以create,show的数据,但update action的问题。这里是我的代码user.rb文件未定义的方法`model_name'为#<Hash:0x007efcfb0c19e0>

require 'firebase' 
class User < ActiveRecord::Base 
    FIREBASE = Firebase::Client.new("url" ,"secret") 
    def self.all 
    response = FIREBASE.get('users') 
    response.body.present? ? response.body : {} 
    end 

    def self.find(id) 
    FIREBASE.get("https://stackoverflow.com/users/#{id}").body 
    end 

    def self.update(id, data) 
    response = FIREBASE.update("https://stackoverflow.com/users/#{id}", data) 
    return response.success? 
    end 
end 

和users_controller.rb文件:

class UsersController < ApplicationController 

    respond_to :html, :json 

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

    def update 
    @user = User.find(params[:id]) 
    User.update("#{@user[0]}", user_params) 
    respond_with @user 
    end 
private 

    def user_params 
    params.require(:user).permit(:name) 
    end 
end 

和edit.html.erb文件:

<%= form_for @user do |f| %> 
    <%= f.text_field :name %> 
    <%= f.submit %> 
<% end %> 

这里是我的错误日志:

Started GET "https://stackoverflow.com/users/-KOKEM82melqy/edit" for 180.211.159.218 at 2016-08-04 12:19:58 +0000 
Cannot render console from 180.211.159.218! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 
Processing by UsersController#edit as HTML 
    Parameters: {"id"=>"-KOKEM82melqy3"} 
    Rendered users/edit.html.erb within layouts/application (5.2ms) 
Completed 500 Internal Server Error in 40ms (ActiveRecord: 0.0ms) 

ActionView::Template::Error (undefined method `model_name' for #<Hash:0x007efcfb7c6ab0>): 
    1: <h1>Editing user</h1> 
    2: <%= form_for @user do |f| %> 
    3:  <div class="field"> 
    4:  <%= f.label :name %><br> 
    5:  <%= f.text_field :name %> 
    app/views/users/edit.html.erb:2:in `_app_views_users_edit_html_erb__2046577153275023374_69812507750700' 

我试过了很多次,但注意到工作。任何建议? 如果你需要更多的信息,请告诉我。 在此先感谢。

+0

哪个是错误的行号?也许是出现'user_params'的行? – Ursus

+0

我没有添加user_params问题,我马上添加 – Mezbah

+0

是的,在更新方法 – Ursus

回答

0

显然

def self.find(id) 
    FIREBASE.get("https://stackoverflow.com/users/#{id}").body 
end 

返回Hash

因此,您需要将其转换为User类实例或不能使用form_for帮助程序。

相关问题