0

I don't understand how access data from my View in other table.

I have few models. First is User, second is UsersPreferences. So i have settings page for users and code looks like this:

<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
  <%= f.label        :name %><br />
  <%= f.text_field   :name %>
</div>
...
<div class="checkbox">
  <%= f.check_box :notification_about_new_followers %>                        
  <%= f.label     'Notify via email about new followers' %><br />
</div>

This code works (User has row notification_about_new_followers) but i want to change it. I decided that better way is keep preferences in other table. So i created model UsersPreferences which has user_id and flag 'notify_about_new_followers'. I tried to rewrite my view like that:

<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
  <%= f.label        :name %><br />
  <%= f.text_field   :name %>
</div>
...
<div class="checkbox">
  <%= f.check_box UsersPreferences.find_by_user_id(@user.id).notify_about_new_followers %>                        
  <%= f.label     'Notify via email about new followers' %><br />
</div>

But when i visit page with code i get such error

undefined method `true' for #<User:0x007f8ac180dee8>

How can i solve this error?

User model:

class User < ActiveRecord::Base
  attr_accessible :name, ... , :notification_about_new_followers
  ...
  has_one  :users_preferences
end

UsersPreferences model:

class UsersPreferences < ActiveRecord::Base
  belongs_to :user, :class_name => "User"
  attr_accessible :notify_about_new_followers
end
1

1 Answer 1

1

This line:

<%= f.check_box UsersPreferences.find_by_user_id(@user.id).notify_about_new_followers %>

is causing the error. UsersPreferences.find_by_user_id(@user.id).notify_about_new_followers is true, so essentially that line reads:

<%= f.check_box true %>

And like the error says, there is no 'true' attribute for your UserPreferences model.

To fix this you'll need to first read up on MVC (Model-View-Controller). Without knowing how MVC works, you'll never be able to move forward with Rails. There are a lot of great resources out there, just google "Model View Controller for rails". Here is a good one. A little goofy, though... if that's not your style, try another link.

After you have learned that, look up the rails helper fields_for, and there you will find your answer.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.