将 select 的 id 存储在 ruby 变量中

Storing id from select in ruby variable

我正在为大型移动应用开发 RoR 后端,目前使用管理面板。

我有两个模型:ActivityDeal,加入了 HMT ActivitiesDeal。该连接在 rails 控制台中进行了两种方式的测试,并且非常有效。

Activity 是应用程序构建的模型,因此管理员需要能够以某种直观的方式从 "Edit activity" 表单向 activity 添加交易。 我试过这个来创建 activities_deal:

<%=select("deal", @deal_id, Deal.all.collect {|d| [d.title, d.id]}, {})%>
<%= link_to "Add", link_activity_deal_path(activity_id: @activity.id, deal_id: @deal_id), method:'post' %> 

但它并没有像我想的那样起作用。关于如何将正确的 deal_id 发送到 link_activity_deal_path 有什么想法吗?这似乎是一个已经解决了很多次的问题,但我找不到合适的。

ActivitiesDealsController:

class ActivitiesDealsController < ApplicationController

def create
    @activity = Activity.find(params[:activity_id])
    render file: 'public/404.html' and return unless @activity && Deal.find(params[:deal_id])
    @activity_deal = ActivitiesDeal.new
    @activity_deal.activity_id = params[:activity_id]
    @activity_deal.deal_id = params[:deal_id]
    if @activity_deal.save
        redirect_to proc {activity_url @activity}
    end
    render file: 'public/500.html'
end

def destroy
    p params
    @activity = Activity.find(params[:activity_id])
    render file: 'public/404.html' and return unless @activity
    @activity_deal = ActivitiesDeal.where("activity_id == ? AND deal_id == ?", params[:activity_id], params[:deal_id])
    render file: 'public/404.html' and return unless @activity_deal
    ActivitiesDeal.destroy(@activity_deal)
    redirect_to proc {activity_url @activity}
end
end

通过在编辑页面外制作 form_for 解决了问题。

如果有人需要代码:

 <%= form_for @activity, as: :deal, :url => link_activity_deal_path(activity_id: @activity.id), method:'post' do |f|%>
<%= f.collection_select :id, @deals, :id, :title %>
<%= f.submit "Add Deal", class: "btn btn-primary" %>