【问题标题】:I want to use one controller and html.erb files for my dynamic table. How I will do it in Ruby On Rails?我想为我的动态表使用一个控制器和 html.erb 文件。我将如何在 Ruby On Rails 中做到这一点?
【发布时间】:2015-06-22 08:53:15
【问题描述】:

我将创建的所有表名存储到菜单表。而且每次我在Menu中添加表格时,它都会在Menu list

下自动创建一个链接

见下文。

我希望Menu中的每个表都有ListingNewEditDelete

见下文。

我有一个控制器prj_menus_controller,我将只从菜单表中传递表的 ID。

这是我的控制器中 index 和 new 的代码。

Class PrjMenusController < ApplicationController

  def index
    @prj_menus = Menu.find(params[:id]).tablename.singularize.classify.constantize.all
  end

  def new
    @prj_menu = Menu.find(params[:id]).tablename.singularize.classify.constantize.new
  end

  def create
    @prj_menu = Menu.find(params[:id]).tablename.singularize.classify.constantize.new(prj_menu_params)

    if @prj_menu.save
      redirect_to :action => 'index'
    else
      render :new
    end
  end  

private
  def prj_menu_params
    params.require("HERE IS MY PROBLEM").permit(:name)
  end
end

在我的 new.html.erb

<%= simple_form_for (@prj_menu),:url => prj_menus_path, :method => :post do |f| %>
    <%= f.input :name %>
    <%= f.submit 'Save', class: 'btn btn-primary' %>
    <%= link_to "Cancel", :back, {:class=>"btn btn-default"} %>
<% end %>

我可以在我的index.html.erb 中获取列表,它正在工作。我的问题是,当我单击new.html.erb 中的提交时,我不知道如何获取所有参数。我得到了这个哈希

{"sample1_table"=>{"name"=>"test 6"}, "commit"=>"Save","controller"=>"prj_menus", "action"=>"create"}

这是正确的,但我不知道在我的控制器中放什么。我试过这个params.require(["#{@prj_menu}"]).permit(:name),它会创建新记录,但 params[:name] 没有保存。

我仍然是 Ruby On Rails 的菜鸟,我不知道该搜索什么。

【问题讨论】:

  • 你试过params.require(@prj_menu).permit(:name)吗?
  • 是的,我得到了 params.require(:prj_menu).permit(:name) 而不是 params.require(:sample_table).permit(:name)

标签: ruby-on-rails ruby-on-rails-4 controller metaprogramming dynamic-programming


【解决方案1】:

我认为您对参数白名单的作用以及参数如何从表单传递到控制器感到困惑。

表单哈希的名称是否与数据库表的名称匹配并不重要。它只是在大多数情况下,因为这是最有意义的。它只是代表您应用的 REST 接口。

假设你有一个创建宠物的动作:

POST /pets

在我们的表单中,我们有一堆这样的输入:

<input name="pet[name]">

Rails 将映射创建一个params[:pet] 哈希{ name: 'Spot' }。但我们想将宠物保存为Animal

class PetsController < ApplicationController

  def new 
    @pet = Animal.new()
  end

  def create
    @pet = Animal.new(pet_params)
    if @pet.save
    # ...
  end
  def pet_params
    params.require(:pet).permit(:name)
  end
end

Animal 不关心 params 键是什么,它只是得到一个哈希值。但是我们还需要告诉 simple_form 我们要使用什么参数键,因为它查看的是model_name 属性。

simple_form_for(@pet, as: :pet)

给我们pet[name]而不是animal[name]

我不明白为什么你如此坚持要让自己的事情变得如此困难,除非你正在创建一个 PHP_MyAdmin 的数据库管理工具。即使在这种情况下,您也不想在运行时更改应用数据库的架构。

在创建有效查询以获取所有菜单时,您将遇到巨大的问题。

【讨论】:

  • 感谢您对我的耐心 ^_^ 是的.. 我很困惑.. 我是 Ruby on Rails 的新手,才一个半月。而且我还不知道参数是如何从表单传递到控制器的。这确实是我的问题。抱歉不清楚。我不知道怎么问这个问题。它现在可以工作了,我可以将我的控制器和其他 erb 文件重用到 50 多个具有相同参数的表中以保存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
相关资源
最近更新 更多