将另一个项目的ID /变量添加到当前项目并添加到数据库

时间:2012-12-19 11:20:26

标签: ruby-on-rails database variables

我正在创建一个CMS的网站,你可以在其中使用'Menucards'来放置'类别'。我坚持将菜单卡的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

在menucards索引中:

<%= link_to("menucard", { :action => 'show', :id => menucard.id}) %>

给我一​​个这样的网址:“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 / categories / new?menucard_id =%40current_menucard”

我看到使用:menucard_id =&gt; '@current_menucard'并没有真正起作用。我被困在这一部分。 谢谢你的帮助!

更多信息:

categories_controller:

<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"}

为什么不更新?

2 个答案:

答案 0 :(得分:1)

更改:menucard_id

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

to :: id

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

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

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

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

答案 1 :(得分: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') 
%>

我相信这可行。