Ruby on rails form generation - ruby-on-rails

http://guides.rubyonrails.org/getting_started.html#installing-rails
In this tutorial. Can anyone tell me how is the form getting generated.
<%= form_for :article do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
Where is the :article hash coming from?.
f.label corresponds to the form object, where is the :title coming from?.

Maybe this guide can answer your question:
RailsGuides - Form Helpers
Take a look the "2 Dealing with Model Objects" session

You are calling form_for with the symbol :article which means that the form creates a new instance of Article for use in the form.
I've not tested this code but I would imagine :title is an attribute of Article, either a field in the database or a virtual attribute ect.

Hi if you would just keep following along the tutorial in section 5.4 the root for this elements is explained.

Related

Rails nested forms separated

I'm after some direction in created nested forms operating in their own forms (if that makes sense). I've created some diagrams to help explain what I'm after.
I have the nested forms working fine, I'm just interested to find out if the below is possible.
I know I don't have any code to show, but any guidance or assistance would be greatly appreciated as I'm not sure where to start.
Model
class General < ApplicationRecord
belongs_to :operation
belongs_to :report
end
Form
<%= form_with(model: general, local: true) do |f| %>
<h1>General</h1>
<%= f.text_field :first_name %>
<%= f.text_field :last_name %>
<%= f.collection_select :property_id, Property.all, :id, :name %>
<%= f.collection_select :field_id, Field.all, :id, :name %>
<h1>Operations</h1>
<%= f.fields_for :operations do |o| %>
<%= o.text_field :model %>
<%= o.text_field :type %>
<%= o.collection_select :status_id, Status.all, :id, :name %>
<% end %>
<h1>Reports</h1>
<%= f.fields_for :report do |r| %>
<%= r.text_field :first_name %>
<%= r.text_field :last_name %>
<%= r.text_area :comments %>
<% end %>
<%= f.submit 'Submit' %>
<% end %>
This is my standard form using nested forms for Operations and Reports resulting is something like this:
I'm looking to seperate out the Operations and Reports forms and place a link available in the General show route.
The user will click on the Operations link and bring up the nested form to edit.
I'm not sure if I understand you correctly, but I guess you can hide operations and reports using CSS, add two buttons and add an event listener on each of them to display operations form and reports form on click (changing the hidden nested forms CSS).

Hardcode partial input value in a Rails form_for field

I have a Rails form where the user is able to make a Top5 list. While they are able to label the list, all lists start with the phrase "Top 5 Greatest." Of course, it's easy to use Regex and append this phrase to the front of a list in the controller, but then I'm stuck doing it for both the create and update actions, so it's not very dry. Is there a way to hardcode a partial value in a rails form_for that will then be combined with the rest of the form input and sent to the controller?
This is currently what the form looks like (minus the form_for partial):
<br><%= f.label "Top Five Greatest:" %>
<%= f.text_field :title %><br>
<%= f.hidden_field :user_id, value: user.id %>
<br><%= f.label "#1" %>
<%= f.text_field :number1 %>
<br><%= f.label "#2" %>
<%= f.text_field :number2 %>
<br><%= f.label "#3" %>
<%= f.text_field :number3 %>
I'd really appreciate any insight.
Override setter method:
# put this in your model:
def title=(value)
super("Top 5 Greatest #{value}")
end

To store the value of the check box and radio button in the database ruby on rails

rails generate scaffold Post title:string body:text category_id:integer status_id:integer
generated the scaffold like this. category_id and status_id is used for check-box and radio button
Here the value are stored as a integer values like category 1 or 2 but i need to store the value of the category like tv or mobile in the database because we can not understand what product is required .
thank you in advance
<%= f.label :title %>
<%= f.text_field :title %>
<%= f.label :body %>
<%= f.text_area :body %>
<%= f.label :category_id %>
<%= f.select :category_id, options_from_collection_for_select(Category.all, :id, :name, #post.category_id) %>
<%= f.label :status_id %>
<%= collection_radio_buttons(:post, :status_id, Status.all, :id, :name) %>
<%= f.submit %>
link is here i followed those steps
You shouldn't store the text value because it already in the Category table.
if you want to know what product is, you can use #product.category.try(:name) if associations setup correctly

Using form input without updating model Ruby on Rails

I would like to put a form on one of my pages, but don't want to use form_for to update a model. I am basically using this like a filtering/searching system, where the user inputs something, and the page changes based on what the user input. I know this is a pretty simple problem, but I'm also a little new to Rails.
Note: I have the ability to filter the results if I can just get the input value. I just need access to the input value in my Controller.
Just use form_for with a symbol as argument rather than an instance variable.
You can access the form data in your controller by referencing your params, just like you normally would. Let's say you have a form kinda like this:
<%= form_for :search do |f| %>
<%= f.text_field :query %>
<%= f.submit %>
<% end %>
You'll then get the contents of the search form by calling params[:search][:query] in your controller.
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for
you need meta_search
<%= form_for #search, :url => articles_path, :html => {:method => :get} do |f| %>
<%= f.label :title_contains %>
<%= f.text_field :title_contains %><br />
<%= f.label :comments_created_at_greater_than, 'With comments after' %>
<%= f.datetime_select :comments_created_at_greater_than, :include_blank => true %><br />
<!-- etc... -->
<%= f.submit %>
<% end %>

Drop Down Box - Populated with data from another table in a form - Ruby on Rails

I am attempting to add a note capability to my CRM that I am creating.I am employing an authenticated environment where users can manage their prospects. For instance, I sign up, I login, I can enter prospects and view them. So...I have created a prospects and user table and have them all working great. I am now trying to give the users the ability to take a note and "attach" it to a prospect. So...I have created a notes table with the columns, note & prospect. The user can take a note from wherever they pull this form, and my goal is to have their clients names available in a dropdown box to attach to the form. So far I have created an object in the prospects controller that says the following
def index
#myprospects = current_user.prospects.find(params[:id])
end
I am struggling with the next step to create the dropdown in the view/notes/new.html.erb file. The form looks like this:
<h1>New note</h1><hr/>
<% form_for(#note) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :note %><br />
<%= f.text_area :note %>
</p>
<p>
<%= f.label :prospect %><br />
<%= f.text_field :prospect %>
</p>
<p>
<%= f.submit 'Create' %>
</p>
<% end %>
<%= link_to 'Back', notes_path %>
How do I map the
<p>
<%= f.label :prospect %><br />
<%= f.text_field :prospect %>
</p>
field to display the data I want? I am three days into rails so talk to me like I am a 10 year old (a 10 year old that doesn't know rails).
You're looking for a select box.
Rails provides a lot of helpers to create form inputs. The right one for your job is collection_select.
Assuming you've set up a many-to-one relationship between notes and prospects properly, and the column that contains a prospect's name in the prospects table is called 'name', this will do exactly what you want:
<p>
<%= f.label :prospect %><br />
<%= f.collection_select :prospect_id, #myprospects, :id, :name, :prompt => "Select a prospect" %>
</p>

Resources