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
Post a Comment