我对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)生成其余参数的输入,但随后可以返回到创建的项目并进行编辑手动输入其内容。
有人可以指出我正确的方向吗?我觉得我需要创建某种辅助方法,但这是我在项目中遇到的真正的第一个编程。
答案 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
注意:此代码未经测试。这只是给您提示您应该如何进行。您可能需要更改一些方法/字段名称,以使其适合您的应用程序。