2015-11-29 43 views
1

我的項目是關於一個在線購物網站,使用Ruby on Rails購買手機。如何從rails表單創建相關資源提交

我的網站有添加手機的頁面 - 三星,諾基亞......並且在三星,它有很多設備。 我如何獲得三星的ID來創建一個'三星'類型的新手機。 Samsung在Products表格中,手機在Phones表格中。

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 

但我不能得到產品的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 
+0

掛起,請檢查我的編輯,看看這是你在問什麼。 –

回答

0

你可以有一個嵌套在您的路線資源,如下:

resources :product do 
    resources :phone 
end 

並在您的產品視圖中添加此網址幫手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 
+0

當我點擊SamSung時,它會顯示動作'show',接下來我點擊創建新手機,爲什麼我可以params [:product_name] –

+0

你的路線是什麼樣子的?我喜歡'產品/:product_id/phone/new' – sadaf2605

+0

資源:產品 –

相關問題