繁体   English   中英

在Rails上的ruby上创建具有多个关联的对象

[英]Creating an object with multiple associations on ruby on rails

我是ruby on rails的初学者,我正在尝试创建一个带有2个外部ID(“ user_id”和“ room_id”)的“ Order”表。 到目前为止,我只能随时填写一个外国身份证。

这是模型的代码。

class User < ActiveRecord::Base
    has_many: orders, dependent: :destroy
end 

class Room < ActiveRecord::Base
    has_many: orders, dependent: :destroy
end

class Order < ActiveRecord::Base
    belongs_to :user
    belongs_to :room

    validates :user_id, presence: true
    #validates :room_id, presence: true
    validates :meal, presence: true
end

这是用户控制器的相关代码

class UsersController < ApplicationController
    def current_user
        channel_id = session[:channel_id]
        @current_user ||= User.find_by(id: channel_id)
    end
end

这是房间控制器的相关代码

class RoomsController < ApplicationController
    def current_room
        room_id = session[:room_id]
        @current_room ||= Room.find_by(id: channel_id)
    end
end

这是订单控制器的相关代码

class OrdersController < ApplicationController
    def new
        @order = Order.new
    end

    def create
        @order = current_user.orders.build(order_params)    #only user_id column will be filled
        #@order = current_room.orders.build(order_params)    #only room_id column will be filled
        if @order.save 
            flash[:success] = "Item has been successfully added"
            redirect_to all_orders_path
        else 
            flash[:danger] = "Item was not added!"
            render 'new'
        end
    end

    private 
    def order_params
        params.require(:ameens_menu).permit(:meal)
    end
end

这是订单的代码

<% provide(:title, "Order Form") %>
<div>
    <div>

    <h1>Place an order</h1>
    <%= form_for(@order) do |f| %>
    <%= f.label :Meal %>
    <%= f.text_field :meal %>
    <%= f.submit "Submit my order" %>

    <% end %>
    </div>
</div>

提交订单时,会同时更新channel_id和room_id,但只能将一个id记录到数据库中。

当我使用@order = current_room.orders.build(order_params)时,表格将如下所示:

|  Meal  | Room ID | User ID |
|Chicken |    4    |  <nil>  |

当我使用@order = current_user.orders.build(order_params)时,表格将如下所示:

|  Meal  | Room ID | User ID |
|Chicken |  <nil>  |   60    |

有什么方法可以创建对象@order,以便有2个关联,并且数据库表可以这样:

|  Meal  | Room ID | User ID |
|Chicken |    4    |   60    |

如果我正确理解了您的问题,则可以轻松实现。 在您的控制器中,您可以执行以下操作:

class OrdersController < ApplicationController
    # ...

    def create
        @order = current_user.orders.build(order_params)
        @order.room = current_room   # association to room set here
        if @order.save 
           flash[:success] = "Item has been successfully added"
           redirect_to all_orders_path
        else 
            flash[:danger] = "Item was not added!"
            render 'new'
        end
    end

    # ...
end

希望能有所帮助。

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM