2012-03-07 2 views
0

Ладно, так что мои ассоциации являются:Rails 3.2 - Вложенный ресурсов Передача ID

Outlet -> has_many :monitorings 
Monitoring -> belongs_to :outlet 

Мои маршруты:

resources :outlets do 
    resources :monitorings 
end 

Вид:

<%= link_to new_outlet_monitoring_path(@outlet) %> 

Когда я нажимаю на ссылку, протоколирует показать, что значение output_id правильно передано в качестве параметра на новую страницу. Но при сохранении записи мониторинга, outlet_id становится нулевым.

Любая помощь?

UPDATE:

# views/monitorings/_form.html.erb 

<%= form_for(@monitoring) do |f| %> 
<h2>Type of Monitoring</h2> 
<fieldset data-role="controlgroup" > 
    <div class="radio-group"> 
     <%= f.radio_button :mtype, "Full" %><%= f.label :mtype, "Full", value: "Full" %> 
     <%= f.radio_button :mtype, "Partial" %><%= f.label :mtype, "Partial", value: "Partial" %> 
     <%= f.radio_button :mtype, "None" %><%= f.label :mtype, "None", value: "None" %> 
    </div> 
</fieldset> 
<hr> 
<%= f.submit "Next Step" %> 
<% end %> 

И контроллер:

# controllers/monitoring_controller.rb 


def new 
    @monitoring = Monitoring.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @monitoring } 
    end 
end 

def create 
    @monitoring = Monitoring.new(params[:monitoring]) 

    respond_to do |format| 
    if @monitoring.save 
     format.html { redirect_to @monitoring, notice: 'Monitoring was successfully created.' } 
     format.json { render json: @monitoring, status: :created, location: @monitoring } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @monitoring.errors, status: :unprocessable_entity } 
    end 
    end 
end 

ответ

1

Это, скорее всего, проблема с тем, как вы создаете новую запись мониторинга. Можем ли мы увидеть вашу форму и действие вашего контроллера?

+0

Я добавил его как дополнение к исходному вопросу для вас :) – Ammar

+0

Есть два способа сделать это. Оба связаны с созданием объекта выхода в новом действии контроллера. Поэтому добавьте '@outlet = Outlet.find (params [: outlet_id]) к новому действию. Теперь у вас есть два варианта. 1: измените объявление @monitoring на '@monitoring = @ outlet.monitorings.new' и ничего не измените в вашем представлении. 2: оставьте объявление только @monitoring и измените форму form_for на 'form_for [@outlet, @monitoring] do | f |' – JohnColvin

+0

Я использую опцию 2 и раньше не пробовал вариант 1. Я ** ДУМАЮ ** все будет работать. – JohnColvin