ruby on rails - Logging User IP to DB in RoR -


i have been struggling ages , none of related questions seem of use. trying collect user's ip via hidden field, , display on applicable message. when try implement following error on form page. i'm not sure whether it's due issue updating tables or what, value ip not come when run message.all here the relevant code: console when running messages.all:

irb(main):002:0> message.all   message load (2.6ms)  select "messages".* "messages" => #<activerecord::relation [#<message id: 30, subject: "pears", content: "pears", post_time: nil, created_at: "2015-07-02 19:49:32", updated_at: "2015-07-02 19:49:32">, #<message id: 31, subject: "pears", content: "pears\r\n", post_time: nil, created_at: "2015-07-14 17:49:12", updated_at: "2015-07-14 17:49:12">, #<message id: 32, subject: "hi", content: "muffin", post_time: nil, created_at: "2015-07-14 17:52:23", updated_at: "2015-07-14 17:52:23">]> irb(main):003:0>  

migration file messages model:

class createmessages < activerecord::migration   def change     create_table :messages |t|       t.string :subject       t.string :content       t.string :ip       t.date :post_time        t.timestamps null: false     end   end end 

messages controller:

class messagescontroller < applicationcontroller     def index         @messages=message.all     end     def new         @messages=message.new     end     def show         @message=message.find(params[:id])     end     def destroy         @messages=message.find(params[:id])         @messages.destroy         redirect_to '/'     end     def create         @messages = message.new(message_params)              if @messages.save              redirect_to '/'                  else              render 'new'              end     end     private     def message_params         params.require(:message).permit(:content, :subject, :id, :ip)     end  end 

submit message view:

<div class="formwrapper">     <%=form_for message.new |t|%>     <div class ="inputs">         <div class="row">          <div class="input-field col s6">         <%=t.text_field :subject, :class => "validate", :length => '25', :placeholder => 'subject'%><br>         <%=t.text_area :content, :class => "materialize-textarea", :placeholder => "message"%>         <%=t.hidden_field :ip, :value => request.remote_ip %>         <div class="g-recaptcha" data-sitekey=""></div>         </div>         </div>          <div class="submit">             <%=t.submit "submit", :class => "btn"%>          </div>          <%end%>     </div> </div> 

index page(where messages displayed):

<div class="main">          <%@messages.each |t|%>         <div class="cwrap">         <div class="col s12 m6">         <div class="card blue-grey darken-1">         <div class="card-content white-text">         <span class="card-title"><%=link_to t.subject, show_path(t)%></span>         <div class="divider"></div>         <p><%=t.content%></p>         <p><%=t.ip%></p>         </div>             <div class="card-action">                 <%=link_to "delete message", delete_path(t), :method => 'delete'%>             </div>          </div>         </div>     </div>     <% end %> </div> 

first of bad idea, can change ip in form directly (for example chrome dev tools)... better set ip before save message in controller:

@message = message.new(message_params) @message.ip = request.remote_ip @message.save 

the next thing, if console

irb(main):002:0> message.all   message load (2.6ms)  select "messages".* "messages" => #<activerecord::relation [#<message id: 30, subject: "pears", content: "pears", post_time: nil, created_at: "2015-07-02 19:49:32", updated_at: "2015-07-02 19:49:32">, #<message id: 31, subject: "pears", content: "pears\r\n", post_time: nil, created_at: "2015-07-14 17:49:12", updated_at: "2015-07-14 17:49:12">, #<message id: 32, subject: "hi", content: "muffin", post_time: nil, created_at: "2015-07-14 17:52:23", updated_at: "2015-07-14 17:52:23">]> irb(main):003:0>  

there no ip attribute of object message! looks add ip field applied migration, please rollback , migrate again (to create message table) or remove t.string :ip , create new migration add ip messages table:

def change   add_column :messages, :ip, :string end 

Comments