【问题标题】:How to create a related resource from a rails form submit如何从 Rails 表单提交创建相关资源
【发布时间】:2016-03-03 03:16:19
【问题描述】:

我的项目是关于一个在线购物网站,使用 Ruby on Rails 购买手机。

我的网站有一个添加手机的页面 - 三星、诺基亚……在三星,它有很多设备。 如何获取三星的 ID 以创建“三星”类型的新手机。三星在产品表中,手机在电话表中。

class Phone < ActiveRecord::Base
  belongs_to :product
end
class Product < ActiveRecord::Base
  has_many :phones
end

这是产品的动作表演:

<h1>Your item</h1>

<h3><%= @product.name %></h4>
<% if logged_in?%>
    <% if current_user.admin? %>
        <%= link_to 'Edit',edit_product_path%>
    <%end%>
<%end%>
<%= link_to 'Home',welcome_home_path%>
<%= link_to 'New item',new_phone_path %> 
<%= link_to 'Create new phone',new_phone_path%> #It links to action new of Phones

但我无法获取 Product 的 ID 来做:`object_product.phones.create

class PhoneController < ApplicationController
  def new

  end
  def show
    @phone = Phone.find(params[:phone_id])
  end
  def create
    @product = Product.find(params[:product_id])
    @phone = @product.phones.create(phone)
    redirect_to product_phone_path
  end
  private
    def phone
      params.require(:phone).permit(:name,:num)
    end
end

【问题讨论】:

  • Hung,请检查我的编辑,看看是否是您所要求的。

标签: ruby-on-rails ruby


【解决方案1】:

你可以在你的路由中有一个嵌套资源,如下所示:

resources :product do
  resources :phone
end

并在您的产品视图中添加此 url 助手 new_product_phone_path 而不是 new_phone_path

所以现在您的新路线如下所示:

/product/:product_id/phone/new

新控制器:

def new
    @phone=Phone.new
end

现在,如果您的表单中有以下内容:

<%= form_for @phone do |f| %>
  <%= f.label :name %>:
  <%= f.text_field :name %><br />

  <%= f.submit %>
<% end %>

您的控制器操作将如下所示:

def create
    @phone=Phone.create(name: params[:name])
    @product=Product.find(params[:product_id])
    @product.phones << @phone
end

【讨论】:

  • 当我点击三星时,它会显示动作'show',然后我点击创建新手机,所以为什么我可以参数[:product_name]
  • 你的路线是什么样的?是不是像products/:product_id/phone/new
  • 我尝试使用 Helper,但它似乎不起作用。我的 Helper 获取产品 id(在这种情况下是三星)
  • 我的路线是电话/新的。(点击创建新电话后)
  • 如果有帮助,请考虑通过单击答案旁边和投票的上下箭头标记下方的刻度线来接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多