获取要传递给form_for的对象的id

时间:2014-03-03 19:05:44

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我正在尝试找到我的时间表ID以传递给form_for

这是我的控制器

def show

    @time_id = current_user.time_sheets.find(params[:id])
    if current_user

      @current = current_user.time_sheets
    else
      redirect_to new_user_session_path, notice: 'You are not logged in.'
    end

  end

在我看来,这是我的form_for:

<%= form_for(:entry, :url => {:controller => Entry, :action => 'create'}) do |f| %>

    <table summary="Subject form fields">
      <tr>
        <th>Customer</th>
        <td><%= f.text_field(:customer_name) %></td>
      </tr>
      <tr>
        <th>Order Number</th>
        <td><%= f.text_field(:order_number) %></td>
      </tr>
      <tr>
        <th>Time In</th>
        <td><%= f.text_field(:time_in) %></td>
      </tr>
      <tr>
        <th>Time Out</th>
        <td><%= f.text_field(:time_out) %></td>
      </tr>
      <tr>
        <th>Time Sheet ID</th>
        <td><%= f.hidden_field :time_sheet_id, value: @time_id.id %></td>
      </tr>

    </table>

    <div class="form-buttons">
      <%= submit_tag("Add Entry") %>
    </div>

  <% end %>

需要进行的是时间表ID需要传递到form_for,以便条目可以包含时间表ID。

我有用户,时间表和条目。用户has_many时间表,时间表属于用户,用户有很多时间表。条目属于时间表。

我收到此错误“无法找到没有ID的TimeSheet”

2 个答案:

答案 0 :(得分:1)

您应该使用“嵌套资源”,例如。见这里:Rails 3: How to create a new nested resource? 您可以使用form_for([@ timesheet,@ entry])来传递时间表的id而不使用隐藏字段。如果你这样做,:url param也会过时。

答案 1 :(得分:0)

尝试添加:

<%= @time_id.id %>

输出你的变量并确保它与你的想法完全一致。如果@time_id是时间表,则应该将该变量重命名为@time_sheet。