2016-02-27 6 views
-3

Я очень новичок в рельсах. У меня есть одна до многих ассоциаций. Таблица1 с несколькими полями. Одно поле - это название, а еще один заголовок ccode. Таблица 2, как только имеет только 2 поля, первое поле также является местоположением, а второе - также ccode. Эта таблица предназначена для хранения моего местоположения. В таблице 1, когда я создаю объект, я назначаю код, и я хочу получить соответствующее местоположение в коде c2 из таблицы2. Таблица 2 has_many Таблица 1 и Таблица 1 принадлежит_ таблице2. Также я хочу показать местоположение в моем индексном представлении в теге <table>. Я думаю, что мой код просмотра выглядит так же, как в примере, который я нашел, и я достаточно хорошо понимаю html. Проблема, которую я получаю, заключается в том, что мой объект Table2 возвращает nil.Рубин на рельсах одно для ассоциации

Вот как выглядит моя модель для Table1.

class Table1 < ActiveRecord::Base 
    belongs_to :table_2 

    require 'csv' 

    def self.import(file) 
     CSV.foreach(file.path, headers: true, row_sep: :auto, col_sep: "\t") do |row| 
      Table1.create! row.to_hash 
     end 
    end 
end 

Вот как выглядит моя модель для Table2.

class Table2 < ActiveRecord::Base 
    self.table_name = 'table_2' 
    self.primary_key = 'ccode' 
    has_many :table1 
end 

Вот что выглядит Table1Controller как

class FinancialsController < ApplicationController 

    def index 
     @financials = Financial.all 
    end 

    def create 
     @financial_loc_ccode = FinancialLocCcode.create(location_code: params[:location_cd], ccode: @financials.ccode) 
    end 
end 

У меня нет контроллера TABLE2, все делается в контроллере Table1, я предполагаю, что это потому, что, когда я начал этот проект был уже стол созданный для Table2.

Как я уже говорил, я очень новичок в рельсах и все еще изучаю связи между моделями и контроллерами, а также как манипулировать данными и хорошо показывает его в html.

Любая помощь будет высоко оценена.

+0

Каков ваш вопрос, в частности? – jvillian

+0

Так ваша конкретная проблема, что ассоциация не происходит? Вы упомянули, что Таблица 2 возвращала нуль. Когда? Когда вы создаете объекты table1, вы передаете им строку ... вы также передаете им идентификатор Table2? Если нет ... то связь с объектом Table2 никогда не происходит. – toddmetheny

ответ

0

Я сосредоточусь на таблице 2, которая равна нулю.

Это ничто, потому что вы его не создаете.

Зайдите в терминал и введите rails g controller table2 create

открытый файл и внутри пустого create метода вы будете создавать новый объект TABLE2.

Вы можете сделать это по-разному, но самое главное, чтобы помнить, когда у вас есть ассоциации, является то, что вам нужно определить ассоциацию, когда вы ее создаете.

Я дам вам пример:

Скажем, у меня есть модель пользователя

пользователя Модель

class User < ActiveRecord::Base 
has_many :posts 

end 

Теперь, скажем, у меня есть модель Post, и я хочу чтобы иметь возможность создавать много сообщений.

Сообщение Модель

class Post < ActiveRecord::Base 
belongs_to :user 

end 

Теперь это важная часть, где мы будем использовать контроллер table2

Когда я создаю новый пост, он должен belongs_to пользователя, для этого мы будем делать это

сообщение контроллер

class PostsController < ApplicationController 

    def create 
    #store the object that has many posts as a variable 
    @user = current_user 

    #the important part, when you create a post you need to do this 
    @post = @user.posts.create(post_params) 
    end 

end 

Что здесь происходит, Rails создает новый пост под властью @user. Вот как вы устанавливаете отношения путем ассоциации.

Я надеюсь, что это помогло немного разобраться в отношениях, если не здесь, некоторые документы, которые тоже могут помочь.

http://guides.rubyonrails.org/association_basics.html