从一个输入中填写其他表单参数

时间:2018-07-05 06:18:01

标签: ruby-on-rails ruby-on-rails-5

我对Rails还是很陌生,无法找到有关如何执行此操作的任何信息。

当前,用户通过使用URL,标题,内容等填充表单来创建项目。

@resource = Resource.new(resource_params) 

。 。

def resource_params
  params.require(:resource).permit(:title, :url, :content, :name, :tags_as_string)
end

我希望用户只能输入URL,并使用MetaInspector gem(https://github.com/jaimeiniesta/metainspector)生成其余参数的输入,但随后可以返回到创建的项目并进行编辑手动输入其内容。

有人可以指出我正确的方向吗?我觉得我需要创建某种辅助方法,但这是我在项目中遇到的真正的第一个编程。

1 个答案:

答案 0 :(得分:0)

为防止用户传递url以外的任何字段的值,您将需要从新资源表单中删除除url外的所有字段。

app / views / resources / new.html.erb

<%= form_for(@resource) do |f| %>
  <%= f.text_field :url %>
<% end %>

在控制器操作create中,仅允许:url进行参数设置。

app / controllers / resources_controller.rb

def create
  @resource = Resource.new(params.require(:resource).permit(:url))
  # Set other attributes using `metainspector`. See documentation for usage.

  if @resource.save
    redirect_to resources_path
  else
    render :new
  end
end

您可以使用一个单独的表单(包含所有字段)来手动编辑资源,并使用update操作的一组不同的允许参数。

app / views / resources / edit.html.erb

<%= form_for(@resource) do |f| %>
  <%= f.text_field :url %>
  <%= f.text_field :title %>
  <%= f.text_field :content %>
  <!-- Add other editable fields here -->
<% end %>

app / controllers / resources_controller.rb

before_action :fetch_resource, only: [:edit, :update]

def update
  if @resource.update_attributes(resource_params)
    redirect_to resources_path
  else
    render :edit
  end
end

private

def fetch_resource
  # Fetch `Resource` instance from database. Homework for you.
end

def resource_params
  params.require(:resource).permit(:title, :url, :content, :name, :tags_as_string)
end

注意:此代码未经测试。这只是给您提示您应该如何进行。您可能需要更改一些方法/字段名称,以使其适合您的应用程序。