2015-04-15 3 views
1

У меня есть две модели: Schedules и Result.Rails Создать модель с родительским отношением

  • Расписание has_one Результата
  • Результат belongs_to Расписания

Schedules данные будут созданы первыми и, как спичка произойдет, мы будем создавать results для каждого schedule.

enter image description here

Как на картинке выше, ссылка Create приведет вас на страницу, где вы будете создавать результат для расписания. Я пришлю schedule_id расписания, для которых нажата кнопка Create.

<%= link_to "Create",new_result_url(:schedule_id => schedule.id),{:class => 'btn btn-link btn'}%> 

И в Результаты # Новый

def new 
    @schedule = Schedule.find(params[:schedule_id]) 
    @result = @schedule.build_result 
    end 

И в представлении результаты/new.html.erb

Это где я застрял или не знаю, как представить форму результата для schedule_id Я выбрал

<div class="row"> 
    <div class="col-md-4"> 

<%= form_for(@result) do |f| %> 
    <h3>Enter the result</h3> 
    <%= f.text_area :result,class:'form-control' %><br /> 
    <%= f.submit "Submit", class: "btn btn-primary" %> 
<% end %> 
</div> 
</div> 

ответ

1

В вашей форме, добавьте:

<%= f.hidden_field :schedule_id, value: @schedule.id %> 

Это пройдет id родителя schedule в с Params. Кроме того, убедитесь, что у вас permit параметр schedule_id в вашем контроллере.

Кроме того, чтобы сделать его легче пройти schedule_id на results#new странице, я бы изменить routes файл следующим образом:

resources :schedules do 
    resources :results 
end 

Таким образом, маршрут к results#new страницы теперь new_schedule_result_path(@schedule), который вы можете использовать в своем link_to.

Edit:

Кроме того, изменить ваш form_for на:

<%= form_for[@schedule, @result] do |f| %> 

Вы должны были бы иметь @schedule определен в контроллере.

+0

Спасибо Райан и Джон Эванс за ваши быстрые ответы, действительно оцените! Я попробую и опубликую результаты в ближайшее время !! – Krish

+0

Итак, в результате/new.html.erb, когда я отправляю форму, он говорит о неопределенном методе results_path .. как мне построить форму '<% = form_for @result do | f | %> '?? или как его вложенный я должен сделать некоторые вроде этого '<% = form_for @ schedule.result do | f | %> '?? извините за то, что я так наивна в этом, я новичок в рельсах. – Krish

+0

А, измените ваш 'form_for' на:' <% = form_for [@schedule, @result] do | f | %> '. Конечно, у вас должен быть '@ schedule', определенный в вашем контроллере. –

3

Возможно, вы захотите вложить result под schedules.В маршрутах:

resources :schedules do 
    resource :result 
end 

И тогда ваш контроллер может выглядеть следующим образом:

class ResultsController < ApplicationController 
    def create 
    schedule.create_result(result_params) 
    end 

    private 

    def schedule 
    Schedule.find(params[:schedule_id]) 
    end 

    def result_params 
    params.require(:result).permit(:result) 
    end 
end 

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

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