在link_to中使用* _path(:param => @param)不会将参数传递给控制器

时间:2013-07-07 21:35:51

标签: ruby-on-rails-3.2

这是我的设置:Rails 3.2.13

我已经为new传递了一个参数“restaurant_id”,现在我尝试通过create的提交按钮传递相同的参数。但是,它似乎没有识别create的参数。

换新:

<%= link_to t('.new', :default => t("helpers.links.new")),
            new_reservation_path(:restaurant_id => restaurant.id),
            :class => 'btn btn-primary' %>

这在restaurant.id中正确传递给控制器​​中的new。然后,在新视图中,我有一个提交按钮:

对于创建:

<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
    reservations_path(:restaurant_id => @restaurant.id), :class => 'btn' %>

我想要做的是在创建和保存对象时再次传入restaurant.id.但是,它不会出现在create方法中。 @ restaurant.id有效地自行生成正确的id,但不会通过。

这是我的控制器:

class ReservationsController < ApplicationController
    def new
        @reservation = Restaurant.find(params[:restaurant_id]).reservations.new
        @restaurant = Restaurant.find(params[:restaurant_id])
    end

    def create
        @reservation = Restaurant.find(params[:restaurant_id]).reservations.new(params[:reservation])

        if @reservation.save
          redirect_to root_url, notice: 'Reservation was successfully created.'
        else
          render action: "new", notice: 'There was an error.'
        end
    end
end

当它试图找到餐馆时,我收到No ID错误:

ActiveRecord::RecordNotFound in ReservationsController#create

Couldn't find Restaurant without an ID

当我在控制器中测试:restaurant_id时,它返回空白。

这很奇怪,因为我使用完全相同的方法传递:restaurant_id到我的新控制器,但是当它传递给我的创建控制器时它不起作用。

1 个答案:

答案 0 :(得分:0)

我没有看到该提交按钮的代码,但由于该提交按钮发送了一个表单,您需要将该参数作为隐藏字段(hidden_fieldhidden_field_tag)传递。 HTML表单?中路径中的action根本无法通过。