2014-06-05 9 views
1

基本上是一個用戶是項目主頁,他們點擊添加新的網站,該網站設置了這樣預設在控制器中的參數軌

<%= link_to 'Add Asset', new_website_path(:project_id => "#{@project.id}"), class: 'btn btn-md btn-danger' %> 

,然後他們填寫了一些數據表單上。不過,我希望這樣,當他們提交該表單時,項目ID(來自他們剛纔的項目頁面)被保存在網站的project_id變量下,但出於某種原因,這不起作用。

class WebsitesController < ApplicationController 
    def new 
    @project = Project.find(params[:project_id]) 
    @website = Website.new(:type => 'Website', :project_id => @project) 
    end 

    def create 
    @website = current_user.assets.build(website_params) 

    if @website.save 
     flash[:notice] = "Asset successfully added." 
     redirect_to(:controller => 'projects', :action => 'show', :id => @website.project_id) 
    else 
     render(:action => 'new') 
    end 
    end 

    private 

    def website_params 
    params.require(:website).permit(:id, :type,:url, :page_rank, :rev_company ,:social_pages) 
    end 
end 

有什麼缺失,爲什麼這不工作?當我登錄控制檯時,我添加的所有網站都有一個零的project_id。

當我去到我的瀏覽器的形式,這是地址:

http://localhost:3000/websites/new?project_id=1 

而且,我認爲這是獲得正確的項目ID,因爲在形式我有着眼於項目ID的條件看它是否是類型的網站,如:

#views/websites/new.html.erb 
<div class="col-md-5 col-md-offset-3"> 
    <div class="panel panel-default newasset"> 
     <div class="panel-heading"> 
      <h3 class="panel-title ptd"><%= "New #{@project.type}" %></h3> 
     </div> 
<div class='panel-body'> 
      <div class='form group'> 
<%= simple_form_for(@website, html: {class: 'form-group' }) do |f| %> 
<% if (@project.type == 'Website') %> 
<div class="col-xs-4 col-xs-offset-3"> 
    <%= f.input :title, label: 'Website Name' %> 
    <%= f.input :url %> 
    <%= f.input :rev_company, label: "Revenue Company" %> 
    <%= f.input :social_pages, label: "Number of Social Sites" %> 
    <%= f.input :page_rank %><br /> 
    <div class="form-actions"> 
    <%= f.button :submit, class: 'btn btn-primary' %> 
</div> 
<% else %> 
You should not see this 
<% end %> 
<% end %> 


     </div> 
     </div> 
    </div> 
</div> 

回答

0

@project是一個對象,數據庫必須期待一個整數。 你應該叫:

@project.id 

最好的解決辦法反正是做:

def new 
    @project = Project.find(params[:project_id] 
    @website = @project.websites.build(:type => 'Website') 
end 

允許導軌通過模型做他magick協會,如果你已經宣佈:所屬,和HAS_ONE /多

+0

嘿謝謝你的答案。我該把這個放在哪個方法中?新的或創建方法?這也會創建一個新的項目,每次我想建立一個資產?因爲我只希望它創建新網站並將它們添加到現有項目 – HarryLucas

+0

這是用於新方法。 create方法將需要更改id,如另一個答案中所述的project_id。 – tebayoso

3

假設您正在通過:project_id,那麼您需要在website_params方法中允許project_id

def website_params 
    params.require(:website).permit(:id, :project_id, :type,:url, :page_rank, :rev_company ,:social_pages) 
    ##         ^
    ##          Permit project_id 
end 

目前,還沒有允許的領域project_id這就是爲什麼它沒有得到保存。

對於Rails的4+(與強參數)你需要明確指定哪個你想在數據庫中保存的字段。

+0

啊好吧,這是有道理的。我唯一擔心的是,我最初確實有這樣的想法,但有人告訴我要把它拿出來,因爲如果他們想要的話,可以讓人們在其中注入不同的project_id。這是正確的還是我stil保護這種方式 – HarryLucas

+0

我試着添加這種方式,但它仍然沒有將其添加到網站。我更新了我的問題以包含瀏覽器請求,以確保我正確傳遞了project_id。 – HarryLucas

+0

這是因爲你正在傳遞'project_id'作爲查詢參數,所以它可以作爲'params [:project_id]'而不是'params [:website] [:project_id]''訪問。 –