Заполнение дополнительных параметров формы с одного входа - PullRequest
0 голосов
/ 05 июля 2018

Я довольно новичок в Rails и не могу найти никакой информации о том, как именно это сделать.

В настоящее время пользователи создают элементы, заполняя форму URL, заголовком, содержимым и т. Д.

@resource = Resource.new(resource_params) 

. , .

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

Я хочу, чтобы пользователи могли вводить только URL и генерировать ввод для остальных параметров, используя гем MetaInspector (https://github.com/jaimeiniesta/metainspector),, но затем иметь возможность вернуться к созданному элементу и редактировать его содержание вручную.

Может кто-нибудь указать мне правильное направление? У меня есть ощущение, что мне нужно создать какой-то вспомогательный метод, но это действительно первое программирование, с которым я столкнулся в своем проекте.

1 Ответ

0 голосов
/ 05 июля 2018

Чтобы пользователи не могли передавать значения в любое поле, кроме url, вам необходимо удалить все поля, кроме URL, из формы нового ресурса.

приложение / просмотров / ресурсы / new.html.erb

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

И в вашем действии контроллера create, разрешите только :url в параметрах.

приложение / контроллеры / 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.

приложение / просмотров / ресурсы / 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 %>

приложение / контроллеры / 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

Примечание: Этот код не проверен. Это просто дать вам подсказки о том, как вы должны действовать. Возможно, вам придется изменить некоторые имена методов / полей, чтобы они соответствовали вашему приложению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...