【问题标题】:Getting a Controller, Route and Hidden-Field-Button to work correctly in Rails让控制器、路由和隐藏字段按钮在 Rails 中正常工作
【发布时间】:2012-07-24 17:36:06
【问题描述】:

我想创建一个按钮,以便用户可以注册课程。注册模型属于用户和课程,并且应该跟踪注册。

我在课程页面上以按钮形式显示以下代码(看起来不错):

<% @enroll = current_user.enrollings.build(course_id: @course.id) %>
<%= form_for(@enroll) do |f| %>  
    <div><%= f.hidden_field :course_id %></div>
    <%= f.submit "Enroll", class: "btn btn-large btn-primary" %>
<% end %>

我有一个用于注册的资源路径,当用户单击该按钮时,页面会转到 /enrollings。

这是注册控制器中的代码:

def create    
@course = Course.find(params[:course_id])
current_user.enroll!(@course)
end

当我单击按钮时,我收到以下错误消息:

EnrollingsController#create 中的 ActiveRecord::RecordNotFound

找不到没有 ID 的课程

为什么不通过表单传递 course_id?如何正确设置控制器?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 forms controller


    【解决方案1】:

    试试这个:

    <div><%= hidden_field_tag "course_id", @course.id %></div>
    

    【讨论】:

    • 在该行引发无方法错误:undefined method `merge' for 2:Fixnum
    • 谢谢,这似乎奏效了。虽然我想知道如何在不更改表单(只是控制器)的情况下修复它。
    • 嗯,你不能,因为你没有将 course_id 的值通过f.hidden_field :course_id 传递给控制器​​。这段代码所做的就是等待它被填充。 =]
    猜你喜欢
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多