【问题标题】:Submitting a form from one model's controller and view to a different model从一个模型的控制器和视图提交表单到另一个模型
【发布时间】:2018-02-05 20:20:00
【问题描述】:

我是 Rails 新手,正在开发一个示例应用程序。该应用程序背后的想法是,它是一个供孩子们乘坐校车的计算机化登记表。有四种型号:Family、Kid、SchoolRide 和 HomeRide。对于 Family 和 Kid,我生成了完整的脚手架,但对于 SchoolRide 和 HomeRide,它们只是带有布尔字段的模型,每个孩子是在早上签到校车还是在下午回家时签到。

我希望能够让用户从孩子展示视图上呈现的表单中签入孩子,但我无法从孩子控制器创建我的骑行模型实例。如何设置视图、路由和控制器?我在哪里/如何将参数传递给儿童控制器中的骑行模型?

这是我的表单渲染到孩子的展示视图中。目前,我收到语法错误。

<%= form_with(model: @school_ride, remote: true), :url => school_rides_path, :html => { :method => :post } do |form| %>
<div><p>
  <%= form.label :check_in %><br>
  <%= form.check_box :check_in %><br>
  </p>
</div>

<div>
  <%= form.hidden_field :kid_id, value: @kid.id %>
</div>

<p>
  <%= form.submit %>
</p> 
<% end %>

这是我的模型:

class Kid < ApplicationRecord
  belongs_to :family
  has_many :school_rides
  has_many :home_rides
end


class HomeRide < ApplicationRecord
    belongs_to :kid
end

class SchoolRide < ApplicationRecord
    belongs_to :kid
end

以下是我的孩子控制器的一些相关部分:

def show
    @family = Family.all
    @school_ride = SchoolRide.new
  end

  # GET /kids/new
  def new
    @kid = Kid.new
  end

  # GET /kids/1/edit
  def edit
  end

  # POST /kids
  # POST /kids.json
  def create
    @kid = Kid.new(kid_params)

    respond_to do |format|
      if @kid.save
        format.html { redirect_to family_path(id: @kid.family_id), notice: 'Kid was successfully created.' }
        format.json { render :show, status: :created, location: @kid }
      else
        format.html { render :new }
        format.json { render json: @kid.errors, status: :unprocessable_entity }
      end
    end


  private
  # Use callbacks to share common setup or constraints between actions.
  def set_kid
    @kid = Kid.find(params[:id])
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def kid_params
    params.require(:kid).permit(:name, :birthdate, :grade, :family_id)
  end  

  def school_ride_params
    params.require(:school_ride).permit(:check_in)
  end

这是我的一些路由:

  resources :kids

 resources :school_rides, only: [:new, :create]

【问题讨论】:

    标签: ruby-on-rails forms model-view-controller routes


    【解决方案1】:

    试试这个:

    <%=form_for @school_rid, remote: true do |form| %>
    

    【讨论】:

    • 不,那没用。我之前的代码中有这个:&lt;%= form_with(model: @school_ride, remote: true) do |form| %&gt;... 这与您所拥有的类似,并且表单至少可以正确加载,但单击“提交”不会写入数据库。这就是为什么我添加了 urlhtml 部分,但现在我遇到了语法错误。
    • 你能把抛出你的错误传给我吗?谢谢!
    • app/views/kids/_formtoschool.html.erb:2:语法错误,意外 =>,期待关键字_end app/views/kids/_formtoschool.html.erb:2:语法错误,意外 = >,期待 &。或 :: 或 '[' 或 '.' app/views/kids/_formtoschool.html.erb:2:语法错误,意外keyword_do_block,期待keyword_end app/views/kids/_formtoschool.html.erb:21:语法错误,意外keyword_ensure,期待结束输入app/ views/kids/show.html.erb:41:in `_app_views_kids_show_html_erb___142926224_113431320'
    • 抱歉耽搁了,我在上班;尝试以下操作:&lt;%= form_with model: @school_ride, remote: true do |form| %&gt;
    • 这让错误消失了,但是当我点击“提交”时,什么都没有发生。没有任何更改写入 SchoolRide 数据库。
    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多