2015-10-19 3 views
-1

Я работаю над своим Rails API. В настоящее время я хочу сохранить объект через пост-запросы с моего устройства. Запросы работают нормально, но есть проблема с сохранением его в БД. Rails говорит:Неизвестный атрибут в Rails - создание нового объекта

ActiveRecord::UnknownAttributeError (unknown attribute 'idea_id' for IdeaTag.): 
    app/controllers/data_controller.rb:42:in `update_ideas' 

Итак, я знаю, что это означает, что он не может найти атрибут «idea_id» в «IdeaTag».

Heres мой data_controller.rb

class DataController < ApplicationController 
    skip_before_filter :verify_authenticity_token 

    def token 
    name=params[:owner] 
    password=params[:password] 

    @owner = Owner.authenticate_by_name(name, password) 
    if @owner 
     if @owner.user_uuid.blank? 
     @user = User.new 
     @user.token = SecureRandom.uuid 
     @user.name = @owner.name 
     @user.owner_uuid = @owner.uuid 
     @user.created_at = Time.now 
     @user.updated_at = Time.now 
     @user.isLoggedIn = false 
     @user.save! 
     end 

     @user = User.find_by_uuid(@owner.user_uuid) 
     if @user.token.blank? 
     token = SecureRandom.uuid 
     @user.token = token 
     @user.save 
     end 
    else 
    render nothing: true, status: :unauthorized 
    end 
    end 

    def update_ideas 
    uuid = params[:uuid] 
    text = params[:text] 
    title = params[:title] 
    owner_uuid = params[:owner_uuid] 
    tag_id_1 = params[:tag_id_1] 
    tag_id_2 = params[:tag_id_2] 
    tag_id_3 = params[:tag_id_3] 
    tag_id_4 = params[:tag_id_4] 
    updated_at = params[:timeStamp] 
    @idea = Idea.new(:uuid => uuid, :text => text, :title => title, :owner_uuid => owner_uuid, :tag_ids => [tag_id_1, tag_id_2, tag_id_3, tag_id_4], :updated_at => updated_at) 
    @idea.save! 
    render json: {:status => 200} 
    end 

    def getjson 
    token = params[:token] 
    @user = User.find_by_token(token) 
    @users = User.all 

    @owner = Owner.find_by_user_uuid(@user.uuid) 
    @Owners = Owner.all 

    ownerUuid = @owner.uuid 

    @tags=Tag.all 
    @ideas=Idea.where(:owner_uuid => ownerUuid) 
    @votes=Vote.all 
    @votings=Voting.all 
    end 

    # def token_auth 
    # token = params[:token] 
    # @owner = Owner.find_by_token(token) 
    # if @owner 
    #  update_ideas 
    # end 
    # end 

end 

ошибка происходит в методе "update_ideas" в следующей строке

@idea = Idea.new (: UUID => UUID,: текст => т.е ...

Идея Модель:

class Idea < ActiveRecord::Base 
    self.primary_key = :uuid 
    has_many :idea_tags 
    has_many :tags, through: :idea_tags 
    belongs_to :voting 
    has_many :votes 
    belongs_to :owner 
end 

Идея переноса файла

class CreateIdeas < ActiveRecord::Migration 
    def change 
    create_table :ideas, :id => false, :primary_key => :uuid do |i| 
     i.string :uuid 
     i.string :title 
     i.string :text 
     i.string :owner_uuid 
     i.string :voting_uuid 
     i.datetime :created_at 
     i.datetime :updated_at 
    end 
    end 
end 

Как я сохранить объекты, как это собственно?

+1

Ты показываешь нам 'ideas', но таблица не имеет ничего общего с ошибкой, которая составляет около недостающих столбцов на' idea_tags'. – meagar

+0

Покажите нам свою миграцию IdeaTag, она должна пропустить столбец idea_id – Caillou

ответ

1

Поскольку вы используете uuid в качестве основного ключа для идей, я предполагаю, что у вас есть поле idea_uuid в IdeaTag? Если да, вам нужно добавить foreign_key: 'idea_uuid в has_many :idea_tags, иначе он по умолчанию предположим, что foreign_key - idea_id. Возможно, вам придется добавить его к методам belongs_to.

has_many :idea_tags, foreign_key: 'idea_uuid'

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Смежные вопросы