Forms: wyświetlenie wartości obiektu w label'u

witam, od wczoraj walczę z jednym problemem i nie mam zielonego pojęcia jak go rozwiązać. Otóż w następującej formie, chciałbym wyświetlić wartość pola w formie labela:

<% form_for @person_data do |person_data| %>

<%= person_data.label :first_name %>
.... <% end %>

jest to możliwe?

w label możesz dać co chcesz, jak drugi argument.

label :nazwa, “#{@pole.wartość}”

coś takiego powinno zadziałać

polecam formtastic czy coś
tam dasz :label => @pole.wartość i tyle

oj… źle sformułowałem pytanie… podam dokładny przykład

[code]<% form_remote_for [foto, Opinion.new_with_marks(foto) ], :html => { :id => ‘new_opinion_form’ } do |f| %>
<%= f.error_messages %>

<%= f.label :comment %>
<%= f.text_field :comment %>

<% f.fields_for :marks do |builder| %>

<%= builder.hidden_field :criterium_id %> <%= builder.label :criterium_name %> <%= builder.text_field :note %>

[/code] chciałbym wyświetlić w <%= builder.label :criterium_name %> wartości z pola criterium_name

No to właśnie coś takiego powinno dać radę

<%= builder.label :criterium_name, “#{criterium_name}” %>

Nie jestem pewien czy ten przecinek tam jest czy nie sprawdź i tyle.

niestety nie działa, ani z przecinkiem, ani bez… wydaje mi się że musi być jakaś możliwość zrobienia tego, jednak siedzę w railsach od 3. miesięcy i skończyły mi się pomysły jak to zrobić…

Spróbuj tak:

<%= builder.label :criterium_name, "#{builder.object.criterium_name}" %>

Czy na pewno musi być to trzymane w labelu? Ten fragment, który podałeś jako przykład nie ma większego sensu.

Jak nie działa jak musi (ps po raz kolejny zachęcam do formtastic czy simple_form, problemy znikną :] )

Przykład:
tak działa sprawdzałem

[code=ruby]<%= form_for(@post) do |f| %>
<% if @post.errors.any? %>


<%= pluralize(@post.errors.count, “error”) %> prohibited this post from being saved:

  <ul>
  <% @post.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
  </ul>
</div>

<% end %>

<% @a = "ala ma kota" %> <%= f.label :body, @a %>
<%= f.text_area :body %>
<%= f.submit %>
<% end %>[/code] jak widać do @a masz przypisane coś i to w label dajesz i się pokażę. Musi działać. W końcu z czegoś te formtastiki i inne rzeczy korzystają, poprzez :label

@Zgryw: nie musi być, najważniejsze aby wyświetlić wartość pola… każdy sposób jest dobry, oby tylko działał

@Gotar: w Twoim przykładzie wyświetlana jest wartość zmiennej do której odwołujesz się bezpośrednio, tylko jak dobrałbyś się do wartości poprzez symbol?

po ostatnim poście przestałem rozumieć co chcesz osiągnąć…

ja też, może to opisz jakoś sensownie, wklej więcej kodu, który się ze sobą łączy. Pokaż gdzie leży to co chesz wyciągnąć, jak ma się do tego forum itp

Weszka: nie łatwiej przypisać do zmiennej obiekt który używasz i zrobić jak proponuje Gotar?

Mam obiekt Opinion

[code=ruby]class Opinion < ActiveRecord::Base
belongs_to :foto

has_many :marks
has_many :criteria, :through => :marks

accepts_nested_attributes_for :marks

def self.new_with_marks(foto)
opinion = Opinion.new
foto.criteria.each do |criterium|
mark = Mark.new
mark.criterium = criterium
opinion.marks.push mark
end
opinion
end
end[/code]
oraz view które pozwala dodawać komentarze (wraz z ocenami wg. różnych kryteriów - obok oceny którą można będzie wpisać/ wybrać chcę umieścić nazwę kryterium) do zdjęć.

[code=ruby]<% form_remote_for [foto, Opinion.new_with_marks(foto) ], :html => { :id => ‘new_opinion_form’ } do |f| %>
<%= f.error_messages %>

<%= f.label :comment %>
<%= f.text_field :comment %>

<% f.fields_for :marks do |builder, index| %>

<%= builder.hidden_field :criterium_id %> <%= builder.label /* nazwa kryterium */ %> <--- nie wiem jak dobrać się w tym miejscu do wartości mark.criterium_name gdzie mark jest jednym z wielu opinion.marks <%= builder.text_field :note %>

<% end %>

<%= f.submit 'Create' %>

<% end %>[/code] Nie wiem jak to dokładniej opisać... w wyniku chcę mieć formę która będzie miała jedno pole komentarza oraz kilka pól z ocenami zdjęcia wg konkretnego kryterium... i właśnie nie wiem jak wyświetlić nazwę kryterium... zaznaczę jeszcze że liczba kryteriów oceny może się zmieniać w zależności od typu zdjęcia.

@squil: może i łatwiej, ale nie wiem jak się dobrać do zmiennej criterium_name która jest w opinion.marks… w zagnieżdżonej formie

dzięki za pomoc i zaangażowanie :slight_smile:

W kontrolerze daj sobie np zmienną

@criteria_name = Mark.find_by_criteria_id(tu to id).name

i to dajesz w formularzu, jeśli dobrze zrozumiałem :confused: Może tak?

Najprościej w kontrolerze

@foto = Foto.find(params[:id]) # or whatever @opinion = Opinion.new_with_marks(@foto) @marks = @opinion.marks
i w widoku

<% form_remote_for [foto, @opinion], ... do |f| %> ... <% f.fields_for @marks do |builder, index| %>
Ale: z tego co wiem, fields_for nie iteruje po obiektach, więc jeśli masz więcej niż jeden mark to powinieneś zrobić
<% @marks.each do |mark| %>
<% f.fields_for mark do |builder| %>
# formularz
<% end %>
<% end %>

I pewnie będziesz miał problemy z faktem, że wszystkie te pola będą się tak samo nazywały. Może tu znajdziesz jakąś podpowiedź: http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for#357-Using-fields-for-with-has-many-associations

fields_for iteruje się po obiektach:

http://railscasts.com/episodes/196-nested-model-form-part-1

@gotar: jak byś wyciągnął id? z symbolu nie da się za bardzo:

zrobiłem coś takiego:
<% @a = Criterium.find_by_id(:criterium_id).name %>
<%= builder.label :body, @a %>

i otrzymałem błąd:
ODBC::Error: 22005 (245) [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting the varchar value '— :criterium_id
’ to data type int.: SELECT TOP 1 * FROM [criteria] WHERE ([criteria].[id] = ‘— :criterium_id’)

ten : przy criterium id nie może być tam musi być realny id, musisz go jakoś przekazać tu, no i to daj poza widok i będzie ok

jakoś :slight_smile: właśnie staram się jakoś to zrobić… niestety nie wiem jak zrobić to jakoś :slight_smile:

a gdzie masz dostęp do tego ID? w którym miejscu?

możesz przez GET w urlu, przez sesje, z bazy sprytnym zapytaniem wyciagnać, możliwości jest kilka