我想为我的动态 table 使用一个控制器和 html.erb 个文件。我将如何在 Ruby Rails 上完成?

I want to use one controller and html.erb files for my dynamic table. How I will do it in Ruby On Rails?

我将创建的所有 table 名称存储到 菜单 table。每次我在菜单中添加table时,它会自动在菜单列表

下创建一个link

见下文。

我希望 Menu 中的每个 table 都有一个 ListingNewEditDelete.

见下文。

我有一个控制器 prj_menus_controller,我将从菜单 table 中传递 table 的 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 在 Rails 上的菜鸟,我不知道要搜索什么。

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

如果表单哈希的名称与数据库的名称相匹配,我并不在乎table。在大多数情况下它只是这样做,因为这最有意义。它只是您应用程序 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 的思路创建数据库管理工具。即使是那种情况,您甚至不想在 运行 时间更改应用程序数据库的架构。

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