2009-08-18 2 views
0

Новое для рельсов и попыток получить от одного до многих отношений. У меня это работает в Model и Controller, но у меня возникают проблемы с его запуском и запуском в представлениях.Ruby on Rails: взгляд от одного до многих.

class Project < ActiveRecord::Base 
    has_many :non_labor_expenses 
end 

class NonLaborExpense < ActiveRecord::Base 
    belongs_to :project 
end 

я вручную создал несколько записей в таблице non_labor_expense путем загрузки @non_labor_expenses в контроллер (редактировать действия) и может потянуть существующие данные в окне проекта следующим образом:

<% unless @non_labor_expenses.nil? %> 
    <% count = 1 %> 
    <% for expense in @non_labor_expenses %> 
    <li> 
     <div class="label"><%= f.label :expense , "Expense" + count.to_s %></div> 
     <%= '$' + expense.amount.to_s + ' - ' + expense.description.to_s %> 

    </li> 
    <% count = count +1 %> 
    <% end %> 

У меня возникли проблемы с добавлением новой записи non_labor_expense в проект. Я должен иметь возможность управлять им на бэкэнд, но я не могу даже получить поле для отображения в форме.

Вот где я в настоящее время:

<li class="editable"> 
    <div class="label"><%= f.label :non_labor_expenses %></div> 
    <%= f.text_field :non_labor_expenses %> 
</li> 

Я знаю, что мой выше код не выглядит ничего подобного, но в идеале полей формы будет что-то вроде:

Expense Amount [text input] 
Expense Description [text input] 

Моя полная форма кода можно найти здесь: http://pastebin.com/m2b280b0f

+0

Можете ли вы опубликовать весь код формы? –

+0

FULL FORM CODE: http://pastebin.com/m2b280b0f – easement

ответ

2

Предполагая, что вы можете добавить только одну форму (вместо JS, чтобы добавить [n] новые затраты без затрат), просто создайте пустую переменную экземпляра в контроллере.

@new_non_labor_expense = NonLaborExpense.new 

В форме, построить его с помощью:

<%= f.text_field :new_non_labor_expense, :amount %> 

Или что соответствующий член вар и поле типа являются.

В контроллере вы получите параметр под названием «new_non_labor_expense» и можете получить к нему доступ, проверить его, связать и сохранить. Или, если какой-либо из этих шагов ошибочно, вы можете вернуться назад и уведомить пользователя.

Если вам нужно добавить больше, просто создайте массив из них, чтобы передать массив NLE. Надеюсь, это имеет смысл.

0

non_labor_expenses - это не текстовое поле, это, вероятно, ваша самая большая проблема.

Лучшим способом сделать это может быть создание нового non_labor_expense, и в его создании есть выпадающий список выбора, чтобы выбрать идентификатор (или имя, через id) проекта.

+0

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

0

Я думаю, что вам нужны вложенные формы. Here Простой пример, как это сделать с отношением друг к другу. Это работает с тех пор, как Rails 2.3.2

+0

Ссылка мертва – mack

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