Не странно, что вы этого не понимаете.
Этот код, вероятно, нелепо стар (.rhtml
и start_form_tag
помещает его в Rails 1 или 2) и действительно плох, он не даже запустить, поскольку есть две синтаксические ошибки, а также кавычки, которые выглядят как артефакт от вставки кода в MS Word
# don't put a space before parens when calling methods in Ruby!
text_field (“cruncher”, “crunch”, {“size” => 30})
Это также даст NoMethodError на @data = @cruncher.crunch
.
В Rails 5 тот же пример можно записать так:
class Cruncher
include ActiveModel::Model
attr_accessor :crunch
def crunch
# have no idea what this was supposed to do
end
end
class LookController < ApplicationController
def at
@cruncher = Cruncher.new(cruncher_params)
@data = @cruncher.crunch
end
private
def cruncher_params
params.fetch(:cruncher).permit(:crunch)
end
end
# I really have no idea what the actual routes are supposed to be
<%= form_for(@cruncher, url: '/look/at') do %>
<%= f.text_field(:crunch size: 30) %>
<% end %>
Хотя это все еще странный и не RESTful пример. Иногда код для мусора лучше оставить похороненным.
Я не понимаю, какова связь между <% = text_field («cruncher», «crunch», {«size» => 30})%> и модель. Какое отношение атрибуты text_fields cruncher и crunch имеют к модели?
Ничего. Нет привязки данных. Это просто обычный текстовый ввод.
Но как насчет этого @cruncher = Cruncher.new (@data_hash [: crunch]), почему мы теперь используем @data_hash [: crunch]?
Потому что автор не знал, что они делают. И, вероятно, не понял, что вы можете передавать хэши своим методам.