2014-03-12 33 views
0

我有機型是這樣的:爲的has_many創建行動:通過

User 
Paper 
Subscription 

正如你可以看到有has_many :through關係和Subscription:user_id and :paper_id

紙業擁有自己的控制器和PapersController#index行動列出了所有可用的論文。

現在真正的問題

我想補充旁邊每篇論文,這意味着調用

SubscriptionsController#create 

方法的「訂閱」鏈接。

在我PapersController#指數

<td><%= link_to "Subscribe", subscriptions_path(paper),:method => :post %></td> 

在我SubscriptionsController#創建我有

def create 
     @subscription = current_user.subscriptions.build(subscription_params) 
     if @subscription.save 
      flash[:success] = "Paper Added to Profile" 
      redirect_to root_url 
     else 
      render 'static_pages/home' 
     end 
    end 

當我看着訂閱表:paper_id是零,我怎麼可以得到:paper_id 我做錯了什麼?

+0

'link_to'不帶選項。 –

回答

1

link_to "Subscribe", subscriptions_path,:method => :post等價路由是

POST /subscriptions(.:format)        subscriptions#create 

所以,你必須通過paper_id明確。看看link_to

更新你的鏈接到<td><%= link_to "Subscribe", subscriptions_path(paper_id: paper.id),:method => :post %></td>

,取而代之的

@subscription = current_user.subscriptions.build(subscription_params) 

其應(如paper_id不是下申購的命名空間,可以直接訪問它)

@subscription = current_user.subscriptions.build({paper_id: params[:paper_id]}) 
+0

謝謝它工作:)你可以請解釋一下。我很困惑。 – user3404674

+0

如果參數[:paper_id]爲空或空白,會發生什麼情況。我認爲你的代碼應該以優雅的方式處理它。 – Raghu

+0

還有一個問題,現在我的訂閱表中有user_id和paper_id什麼是顯示用戶名和紙張名稱的最佳方式。 – user3404674

0

請有嘗試跟隨。

def create 
     paper = Paper.where(id: params[:id]).first 
     @subscription = current_user.subscriptions.push(paper) 
     flash[:success] = "Paper Added to Profile" 
     redirect_to root_url 
    end 
0

重新從服務器控制檯或通過調試您的params值。我認爲你可能會將紙張作爲單獨的參數(如params [:paper_id])提供,但是您僅通過subscription_params創建@subscription實例,該值不是paper_id的值。爲此,請修改您的創建動作,如下所示:

@subscription = current_user.subscriptions.build(subscription_params.marge({:paper_id => params[:paper_id]})