2014-02-13 5 views
1

Я кратко объясню свою ситуацию: у меня есть модель под названием «налог», которая принадлежит «пользователю», а «пользователь» has_one.Сохраните идентификатор модели как внешний ключ через has_one/принадлежит_to

В моей таблице users у меня есть столбец с именем «tax_id», который я хочу сохранить идентификатор налоговой модели, когда пользователь ее создает.

В настоящее время в моей налоговой модели функция создания выглядит примерно так:

class Tax < ActiveRecord:Base 
belongs_to :user 


tax = Tax.new(income: income, taxes: taxes, rrsp: rrsp) 
tax.save 

, а затем в файле taxes_controller, то создать функция выглядит следующим образом:

def create 
    @tax = Tax.new(secure_params) 
    @tax.user = User.find(current_user.id) 
    if @tax.save 
    redirect_to show_tax_path(current_user.tax) 
    else 
    render :new 
    end 
    end 

(secure_params) является сильные параметры для полевых входов, заданные в частном определении.

Теперь, кто-то сказал, что мне может быть повезло, если я использую build, но, к сожалению, я не мог заставить его работать вообще, что-то делать с тем, как я использую current_user (devise). В настоящее время моя настройка работает очень хорошо, кроме сохранения идентификатора налоговой модели в столбце модели пользователя tax_id, как я уже сказал.

Мне интересно, нужно ли мне добавить ключ внешнего ключа в оператор belongs_to или has_one, даже если у меня сложилось впечатление, что «ссылка» должна быть сделана автоматически, если столбец был назван "[model]_id"

+0

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

+0

@arivarasan У меня есть user_id в таблице налогов, но мне нужна двусторонняя связь, так что tax_id также сохраняется в таблице пользователей –

ответ

1

попробуйте использовать

user.build_tax 

Я думаю, что это может помочь вам.

Билд синтаксис для has_many ассоциации:

user.taxes.build 

Билд синтаксис HAS_ONE ассоциации:

user.build_tax # this will work 

user.tax.build # this will throw error 
+0

смущенно о том, где именно разместить синтаксис сборки хоть? Будет ли он переходить под '@ tax.user = User.find (current_user.id)' в методе create в контроллере или он заменит весь метод 'tax = Tax.new (доход: доход, налоги: налоги, rrsp: rrsp) 'в модели? –

+0

Я не знаю, почему вы используете этот метод в модели, а можете просто использовать его в «новом» методе пользователя, а затем в том же «новом» методе пользователя вы можете использовать «user.build_tax», –

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