「Categories」を入れることができる「Menucards」があるCMSでWebサイトを作成しています。メニューカードのIDをカテゴリのデータベーステーブルに追加するプロセスで立ち往生しています。
私がうまくいくと思った方法は次のとおりでした:
データベース内のカテゴリのテーブル
create_table "categories", :force => true do |t|
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "name"
t.integer "menucard_id"
end
メニューカードのインデックス:
<%= link_to("menucard", { :action => 'show', :id => menucard.id}) %>
これにより、次のようなURLが得られます: "http:// localhost:3000 / menucards / 1"
これはメニューカードのショーです:
<%= link_to("Categorie toevoegen",
{:controller => 'categories',
:action => 'new',
:menucard_id => '@current_menucard'},
:class => 'btn btn-green')
%>
application_controllerで、current_menucardを次のように定義しました。
def current_menucard
current_menucard = Menucard.find(params[:id])
end
カテゴリからlink_toを使用するを押すと、URLは「http:// localhost:3000 / category / new?menucard_id =%40current_menucard」になります。
:menucard_id=>'@current_menucard'の使用は実際には機能していないことがわかります。私はこの部分で立ち往生しています。助けてくれてありがとう!
詳細については:
カテゴリ_コントローラー:
<div class="form-area">
<%= form_for([@category], :url => { :action => 'create'}, :html => { :id => "js-editor-page"}) do |category| %>
<label for="name">
<h2>Naam</h2>
<%= category.text_field :name, :class => "full", :placeholder => "Wat is de naam van deze categorie?" %>
</label>
<%= category.hidden_field :menucard_id, :value => current_menucard %>
</div><!-- .form-area -->
<aside class="form-actions">
<%= category.submit "Opslaan", :class => "btn btn-green" %>
<% end %>
アップデート
MurifoXの答えでコードを更新しました。現在、menucard_idはデータベースでまだ更新されていません。ご覧のとおり、非表示フィールドを使用してcurrent_menucardの値を渡しますが、次のようになります。
Couldn't find Menucard without an ID
しかし、後でエラーページで正しいパラメータを取得します。
Parameters:
{"menucard_id"=>"67"}
なぜ更新されないのですか?