1

我正在创建一个带有 CMS 的网站,您可以在其中放置“类别”的“菜单卡”。我被困在将菜单卡的 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

如果我按使用类别中的链接到,则 URL 为“http://localhost:3000/categories/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"}

为什么不更新了?

4

2 回答 2

0

在您的应用程序控制器中,定义您正在使用该方法作为帮助程序

helper_method :current_menucard
def current_menucard
  mc = Menucard.find(params[:id])
  mc.id
end

在您看来,使用返回给您的方法和整数

<%= link_to("Categorie toevoegen", 
 {:controller => 'categories', 
  :action => 'new', 
  :menucard_id => current_menucard}, 
  :class => 'btn btn-green') 
%>

我相信这可能会奏效。

于 2012-12-19T11:33:51.330 回答
0

更改:menucard_id

<%= link_to("Categorie toevoegen", 
{:controller => 'categories', 
    :action => 'new', 
    :menucard_id => '@current_menucard'}, 
    :class => 'btn btn-green') 
%>

到::id

<%= link_to("Categorie toevoegen", 
{:controller => 'categories', 
    :action => 'new', 
    :id => '@current_menucard'}, 
    :class => 'btn btn-green') 
%>

并在您的类别控制器新操作中添加这一行:

@menucard = Menucard.find(params[:id])

现在,您可以在新类别视图中使用 @menucard 变量并将值添加到隐藏字段中。这应该工作

于 2012-12-20T11:48:04.430 回答