Rails 没有传递 id

Rails not passing id

我是 rails 的新手。目前我面临着问题。我有 3 个型号

order, task, and order task.

在订单任务中,我尝试将 id 从 show.html 传递到 edit.html,但 rails 仅传递 http://localhost:3000/orders_tasks/%23%3COrderTask::ActiveRecord_Relation:0x00000009c9a078%3E/edit

而不是身份证号码。

这是我的 show.html.erb

<p id="notice"><%= notice %></p>


<table class="table table-hover">
    <tr>
        <td>Task
        </td>
        <td>Status:
        </td>
    </tr>
    <tr>
        <% @status.each do |i| %>
        <td><%= i.task_id %>
        </td>
        <td><%= i.status %>
        </td>
        
    </tr>
    <% end %>
</table>



<%= link_to 'Edit', edit_orders_task_path(@status) %> |
<%= link_to 'Back', orders_tasks_path %>

这是我的订单任务控制器

class OrdersTasksController < ApplicationController
    before_action :set_status, only: [:show, :edit, :update]
    def index
        @orders = Order.all
       @status = OrderTask.includes(:task,:order).where(order_id: params[:id])
    end
    def edit
    end
    def show  
    end
    
    
    def update
    respond_to do |format|
      if @status.update(order_params)
        format.html { redirect_to @status, notice: 'Order was successfully updated.' }
        format.json { render :show, status: :ok, location: @order }
      else
        format.html { render :edit }
        format.json { render json: @status.errors, status: :unprocessable_entity }
      end
    end
    end 
    
    private
    # Use callbacks to share common setup or constraints between actions.
   def set_status
       @status = OrderTask.includes(:task,:order).where(order_id: params[:id])
    end
    # Never trust parameters from the scary internet, only allow the white list through.
    def order_params
        params.require(:order_task,:order).permit(:order_id,:status)
    end
    
end

这是我的 edit.html

<%= form_for(@status, html: {class: 'form form-horizontal'}).first.id do |f| %>
  <% if @status.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@status.errors.count, "error") %> prohibited this order from being saved:</h2>

      <ul>
      <% @status.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>
<table class="table table-hover">
  
    <tr>
        <td><%= f.label "List of task" %>
        </td>
        <td><%= f.label "Status" %>
        </td>
    </tr>
    <tr>
        <td><%= f.task_id %>
            
            
        </td>
        <td><div class="dropdown">
            <%= f.select(:status,['In progress', 'Completed'], {}, {class: "control"})%> </div>
        </td>
    </tr>
    <tr>
        <td>
        </td>
        <td><%= f.submit %>
        </td>
    </tr>
</table>


<% end %>

我的订单型号

class Order < ActiveRecord::Base
  belongs_to :staff
  belongs_to :customer
  belongs_to :service
  
    
    
   has_many :order_task 
    has_many :tasks , through: :order_task
    

    validates :staff_id , presence: true
end

我的任务模型

class Task < ActiveRecord::Base
    has_many :order_task
    has_many :orders , through: :order_task
    attr_accessor :status, :task_type
    
    validates :task_name, presence: true, uniqueness: true
end

最后是我的订单任务模型

class OrderTask < ActiveRecord::Base
    self.primary_key = [:order_id]
    self.table_name = "Orders_tasks"
    belongs_to :order
    belongs_to :task
    

end

我希望你们能帮助我,因为我已经坚持这个问题一个星期了。 :D

您应该将编辑链接放在循环中...因为@status 包含多个 ordertak,并且每个 ordertask 都应该有自己的编辑页面:

<p id="notice"><%= notice %></p>


<table class="table table-hover">
    <tr>
        <td>Task
        </td>
        <td>Status:
        </td>
        <td>Action:</td>
    </tr>
    <tr>
        <% @status.each do |i| %>
        <td><%= i.task_id %>
        </td>
        <td><%= i.status %>
        </td>
        <td><%= link_to 'Edit', edit_orders_task_path(i) %></td>

    </tr>
    <% end %>
</table>

<%= link_to 'Back', orders_tasks_path %>

编辑:但我想指出的是,大多数时候您的连接模型不需要控制器。所以我不知道你为什么认为你需要它,大部分逻辑都可以从 OrdersController 或 TasksController 构建。