【问题标题】:How to pass parameters in Rails routes helper methods?如何在 Rails 路由辅助方法中传递参数?
【发布时间】:2012-05-17 04:51:16
【问题描述】:

我知道如何以愚蠢的方式传递参数。例如,

<%= link_to "Order", new_order_item_path(:item_id => @item.id) %>

OrderItemsController 以params[:item_id] = id 接收它。

问题:

@order_item = OrderItem.new(params)

引发异常(无法批量分配受保护的属性:动作、控制器)。我可以用下面的代码解决这个问题。

@order_item = OrderItem.new
@order_item.item_id = params[:item_id]

我知道控制器需要params[:order_item][:item_id] 才能让 new 以第一种方式工作。我的问题是,如何让new_order_item_path 生成网址?我知道这不是一个主要问题,但这只是让我感到烦恼的是我不知道更清洁/正确的方法来做到这一点。我尝试过搜索,但只收到了不相关的问题/答案/结果。

谢谢

【问题讨论】:

  • 点击询问 10 秒后,我意识到 new_order_item_path(:order_item => { :item_id => @item.id }) 有效。感觉有点笨拙,但确实有效。
  • 你应该把它作为答案发布并接受它,我也在这个问题上跑过,可能会有所帮助

标签: ruby-on-rails-3 url-routing


【解决方案1】:

您并没有真正指定是否不想使用它,但是在您的模型中,您可以像这样使属性 item_id 可访问:

class OrderItem < ActiveRecord::Base
   attr_accessible :item_id
...

这样,

@order_item = OrderItem.new(params)

会起作用的。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    这个怎么样:

    # Controller
    def get_item_edit_method
      @order = OrderItem.find("your criteria")
      #@order = OrderItem.new # if new
      @item = Item.new() 
    end
    
    def post_item_edit_method
      @order = OrderItem.new(params) # should work now
      @order.save
    end
    # End controller
    
    <!-- view -->
    <% @order.item = @item %>
    <%= link_to "Order", new_order_item_path(@order) %>
    <!-- end view -->
    

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多